Подсказка jQuery: проблема с remove () - PullRequest
0 голосов
/ 15 мая 2010

Я использую плагин 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 ]

2 голосов
/ 14 декабря 2012

У меня была такая же проблема, и в итоге пришлось отложить вызов .remove (), чтобы предотвратить ошибку. Так что что-то вроде следующего может работать для вас:

$(delete_button).click(function() {
   setTimeout( function() { course.remove() } , 1);
   return false;
}).tooltip();
1 голос
/ 15 мая 2010

Плагин .tooltip() имеет несколько обработчиков, которые прикрепляются к элементу, а именно: mouseover, mouseout и click. Если вы удаляете элемент, просто .unbind() все эти события, чтобы они не запускались, например:

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

Еще одно изменение, которое следует отметить, это то, что delete_button уже является объектом jQuery, снова оборачивая его в $() , просто клонирует его :)

Ошибка возникает из-за того, что он пытается извлечь и использовать данные настроек из элемента после того, как он был .remove() через jQuery.data(), в котором jQuery удаляет свои данные из кеш. При таком подходе все эти обработчики всплывающих подсказок не запускаются снова, поэтому не имеет значения, что данные исчезли (как и должно быть), потому что сейчас их никто не будет искать.

...