jQuery工具提示:删除问题()

时间:2010-05-15 02:03:44

标签: javascript jquery dom jquery-tooltip

我正在使用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()是不正确的。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,最终不得不延迟调用.remove()来防止错误。所以类似下面的内容可能适合你:

$(delete_button).click(function() {
   setTimeout( function() { course.remove() } , 1);
   return false;
}).tooltip();

答案 1 :(得分:1)

.tooltip()插件有多个附加到元素的处理程序,即mouseovermouseoutclick。如果您要删除该元素,只需.unbind()所有这些事件,以便它们不会运行,如下所示:

delete_button.click(function() {
    course.unbind().remove();
    return false;
}).tooltip();

需要注意的另一个变化是delete_button已经是一个jQuery对象,再次将其$()包裹在just clones it中:)

发生错误是因为它试图通过.remove()通过jQuery.data()获取并使用它的设置数据,其中jQuery从缓存中删除了它的数据。这种方法只是阻止了所有这些工具提示处理程序再次运行,因此数据消失(应该是这样)并不重要,因为现在没有任何东西可以查找它。