有点啰嗦,但请耐心等待:
asp.net updatepanel 包含许多 qTip2 的表单,有些不是基于 ajax。
因此,如果我在导致回发(触发异步更新和刷新)后立即将 qTip2 悬停,则 qtip 中的 javascript 开始触发并在返回时创建 qtip,但要么是因为事件发起元素不再存在,所以 qip 只是保持打开状态(显示:块) 并出现在文档的左上角(我猜有些代码试图计算出 .position 但元素不再有)。
您可以在这里看到错误:http://www.matclad.co.uk/brick-slip-blends.aspx
尝试即单击一个设计,然后在完成后立即向左或向右移动一个。qTip 将停留在那里。您也可以在添加砖块时执行此操作,尽管时间比较困难
创建 qTip 的代码是:
//为简洁起见修剪函数
var els = $('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input');
els.click(function(){els.each(function(){$(this).qtip('destroy')});})
$('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input')
.each(function(){
var id = $(this).parent().attr('rel');
$(this).qtip({
content: { text:'Loading...',
ajax: { contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/brick-slip-blends.aspx/GetDataForSlip',
data: '{Id:' + id + '}', type: 'POST',
beforeSend: function(jqXHR, settings){
return !Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack();
},
success: function(data, status){
this.set('content.text', data.d);
},
complete: function(){}
}
},
hide: { event: 'click mouseout' },
show: { delay: 500 }
});
});
$('.qt').click(function(){$(this).qtip('destroy');});
$('.qt').qtip();
请注意,在尝试解决此问题时,我在单击时破坏了选择器中的其他 qtip,但这并不能完全正常工作(尽管它已部分修复它)并且我也一直在尝试在 PageRequestManager 方法中做一些事情(atlas ajax API)
我应该使用什么样的策略来解决这个问题?可能的ajax排队问题?取消创建的全局开关(在传递给 qtip 的函数中)?
请帮助我一直在努力解决这个问题,任何帮助将不胜感激。
问候,