我正在使用jQuery tooltip插件。
我有这样的HTML:
<li class="term ui-droppable">
<strong>Fall 2011</strong>
<li class="course ui-draggable">Biological Statistics I<a class="remove-course-button" href="">[X]</a></li>
<div class="term-meta-data">
<p class="total-credits too-few-credits">Total credits: 3</p>
<p class="median-GPA low-GPA">Median Historical GPA: 2.00</p>
</div>
</li>
我想删除.course
元素。所以,我将点击处理程序附加到<a>
:
function _addDeleteButton(course, term) {
var delete_button = $('<a href="" class="remove-course-button" title="Remove this course">[X]</a>');
course.append(delete_button);
$(delete_button).click(function() {
course.remove();
return false;
}).tooltip();
}
在附加点击处理程序方面,一切正常。但是,当调用course.remove()
时,Firebug会在tooltip.js中报告错误:
Line 282
tsettings is null
if ((!IE || !$.fn.bgiframe) && tsettings.fade) {
我做错了什么?如果链接附有工具提示,我是否需要专门删除它?
更新:删除.tooltip()
解决问题。我想保留它,但这让我怀疑我在这里使用.tooltip()
是不正确的。
答案 0 :(得分:2)
我遇到了同样的问题,最终不得不延迟调用.remove()来防止错误。所以类似下面的内容可能适合你:
$(delete_button).click(function() {
setTimeout( function() { course.remove() } , 1);
return false;
}).tooltip();
答案 1 :(得分:1)
.tooltip()
插件有多个附加到元素的处理程序,即mouseover
,mouseout
和click
。如果您要删除该元素,只需.unbind()
所有这些事件,以便它们不会运行,如下所示:
delete_button.click(function() {
course.unbind().remove();
return false;
}).tooltip();
需要注意的另一个变化是delete_button
已经是一个jQuery对象,再次将其$()
包裹在just clones it中:)
发生错误是因为它试图通过.remove()
通过jQuery.data()
获取并使用它的设置数据,其中jQuery从缓存中删除了它的数据。这种方法只是阻止了所有这些工具提示处理程序再次运行,因此数据消失(应该是这样)并不重要,因为现在没有任何东西可以查找它。