【问题标题】:$(this).qtip is not a function$(this).qtip 不是函数
【发布时间】:2012-05-10 12:32:29
【问题描述】:

我的页面中有以下代码,该代码将 qtip 应用于图像。它通过 ajax post 显示每个图像的动态内容。但是在Thickbox/Jquery UI 对话框关闭并抛出错误后它不显示qtip:$(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>

所有路径都是正确的,其他事情都很好。我错过了什么吗?

任何帮助将不胜感激。

【问题讨论】:

  • 看起来您的 js 注册是在您的特定代码运行后发生的。也许尝试另一种方法(在 master 中注册)来链接您的 js 并测试是否是这样。
  • 您确定 qTip 库加载正确吗?
  • 将 alert() 放在 BindQtip() 之前。如果它有效,那么 ericosg 是正确的。
  • 最后一行也应该是 script 而不是 scrpit =)
  • 两个 JS 引用都在 master 中,函数在 child。能详细说明一下注册方法吗?

标签: jquery jquery-ui-dialog qtip thickbox


【解决方案1】:

看起来您正在使用 AJAX 在当前文档中插入 HTML,并且此 HTML 也是由显示初始页面的脚本生成的。这意味着&lt;script&gt; 标记(例如用于 jQuery 和 qTip 的标记)很有可能不仅包含在您的初始页面中,而且还包含在您的 AJAX 响应中。如果这是真的,这些“稍后”的脚本将覆盖 window.$ 中的内容,结果与您描述的相同。

因此,请检查您的 AJAX 是否包含脚本,如果包含,请将其删除。然后一切都应该正常工作。

【讨论】:

  • 你就是那个男人!你摇滚!问题解决了。你之前有没有遇到过类似的问题?任何相同的链接或参考将不胜感激。再次非常感谢。 :)
  • @user686021:是的,我自己过去也遇到过这个问题。如果您查看 jQuery 源代码,您会看到它无条件地覆盖 window.$(它包含所有插件和所有状态)——然后各个部分开始点击在一起。
【解决方案2】:

我认为这可能是可疑行:

$(this).live('click',function() {

再看一下文档中的live,想法是你给它一个选择器,而不是一个元素,然后它将选择器与给定类型的所有事件匹配到达文档。

这种奇怪且令人困惑的语法是 live 在 v1.7 或更高版本中被弃用的原因之一(或者我的偏好,delegate,从 v1.4.2 开始可用)。使用ondelegate,您可以指定要监视事件的实际元素,然后指定一个选择器来匹配委托位的后代。

【讨论】:

    【解决方案3】:

    您的选择器$('image') 将选择所有标记为&lt;image&gt; 的HTML 元素,我不相信有任何...

    【讨论】:

    • 页面上有 HTML 元素。谢谢。
    • 什么?你使用的是 HTML 6 还是一些我不知道的奇怪版本?没有 HTML &lt;image&gt; 元素 afaik。有一个&lt;img&gt; 或一个&lt;input type="image"&gt;
    • 其实我用的是SVG。请查看this
    • 感谢您的澄清……您应该首先提到这一点 :-)
    • 很抱歉,但我觉得这并不重要。任何人下次都会照顾。谢谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2018-01-19
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    相关资源
    最近更新 更多