$(this).qtip is not a function

user686021 picture user686021 · May 10, 2012 · Viewed 8.9k times · Source

I've following code in my page which applies qtip on images. It displays dynamic content for each image through ajax post. But It doesn't display qtip after Thickbox/Jquery UI dialog closes and throws error : $(this).qtip is not a function

<script src="<%= Config.VirtualDir %>js/jquery.js?v=2" type="text/javascript"></script>
<script src="<%= Config.VirtualDir %>js/jquery.qtip-1.0.0-rc3.min.js?v=2" type="text/javascript"></script>

<script type="text/javascript" language="javascript">

$(document).ready(function() {
     BindQtip();
});
 function BindQtip()
 {
$('image').each(function(){
                        $(this).live('click',function() {
                            var $img = $(this);
                            if('<%= objAdminAuth.GetUserID() %>' == $img.attr('data-uid').split('|')[0])
                            {                                        
                                return false;
                            }
                           if ($img.data('qtip')) {return false;} 
                            $(this).qtip({
                                content: 'Loading...',
                                style: {
                                    border: {
                                        width: 5,
                                        radius: 10
                                    },
                                    padding: 0,
                                    textAlign: 'center',
                                    tip: true, // Give it a speech bubble tip with automatic corner detection
                                    name: 'dark' // Style it according to the preset 'cream' style
                                },
                                hide: 'unfocus',
                                show: {
                                    when: 'click', // Don't specify a show event
                                    ready: true, // Show the tooltip when ready
                                    solo: true
                                },
                                position: {
                                    corner: {
                                        tooltip: 'rightMiddle', // Use the corner...
                                        target: 'bottomLeft' // ...and opposite corner
                                    }
                                },
                                api: {
                                    // Retrieve the content when tooltip is first rendered
                                    onRender: function() {

                                        var self = this;
                                        self.content = '';
                                        $.ajax({
                                            url: window.location.href,
                                            type: 'POST',
                                            data: 'call=ajax&uid=' + $img.attr('data-uid'),
                                            success: function(resp) {
                                                self.updateContent(resp);
                                            }
                                        });

                                    },
                                    onContentUpdate: function() {
                                        var self = this;
                                    }
                                }
                            });
                        });
                        });
}
</script>

All path are correct and other things work perfectly. Am I missing anything?

Any help would be appreciated.

Answer

Jon picture Jon · May 10, 2012

It looks like you are using AJAX to insert HTML in the current document, and this HTML is generated by the script that displays the initial page as well. This means there's a high chance that <script> tags such as those for jQuery and qTip are included not only in your initial page but also inside your AJAX responses. If this is true, these "later" scripts will overwrite stuff inside window.$ with results identical to what you describe.

So, check if your AJAX includes the scripts and if it does, remove them. Everything should then work correctly.