我在我的页面中使用了对图像应用qtip的代码。它通过ajax帖子显示每个图像的动态内容。但是在Thickbox / Jquery UI对话框关闭并且抛出错误后它没有显示qtip: $(this).qtip不是函数
<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>
所有路径都是正确的,其他东西都很完美。我错过了什么吗?
任何帮助都将不胜感激。
答案 0 :(得分:4)
看起来您正在使用AJAX在当前文档中插入HTML,而此HTML也是由显示初始页面的脚本生成的。这意味着jQuery和qTip等<script>
标记很可能不仅包含在您的初始页面中,还包含在您的AJAX响应中。如果这是真的,这些“后来的”脚本将覆盖window.$
内的内容,其结果与您描述的相同。
因此,请检查您的AJAX是否包含脚本,如果包含脚本,请将其删除。一切都应该正常工作。
答案 1 :(得分:1)
我认为这可能是可疑线:
$(this).live('click',function() {
在文档中再看一下live
,想法是你给它一个选择器而不是一个元素,然后它将该选择器与给定的所有事件匹配到达文档的类型。
这种奇怪且令人困惑的语法是{1}}在v1.7或更高版本(或我的偏好on
中被弃用而不赞成delegate
的原因之一。 5.0上)。使用live
和on
,您可以指定要在事件上监视的实际元素,然后指定一个选择器以匹配委托位的后代。
答案 2 :(得分:0)
您的选择器$('image')
将选择标记为<image>
的所有HTML元素,我不相信有任何...