jQuery .click () не вызывает ссылки, динамически создаваемые с помощью .wrapInner () - PullRequest
1 голос
/ 10 сентября 2010

У меня проблема с этим сценарием, и я не могу понять, что с ним не так.Быстрый бег через то, что у меня есть:

HTML:

<ul>
    <li id="wildcard_1">
        <div>
            <a href="#">test</a>
        </div>
    </li>
</ul>
<a href="#" class="reset">reset</a>

JQuery:

// Main function
$("[id^=wildcard_]").children('div').children('a').click(function() {
    $(this).replaceWith($(this).text());
});

// Temporary reset function
$("a.reset").click(function() {
    $("[id^=wildcard_]").children('div').wrapInner('<a href="#"></a>');
});

ссылка «тест» работает так, как и должно было быть при первом щелчке - она ​​преобразуется в простой текст).Чтобы не вставлять большую часть скрипта сюда, я создал временную функцию, которая обернет содержимое div, преобразуя «тестовый» простой текст обратно в ссылку.И вот тут дело доходит до провала - слушатель .click() первой функции больше не будет запускать эту динамически созданную ссылку, и FireBug не выдает ни ошибок, ни предупреждений.

Вы также можете увидеть это вживуюна JSfiddle: http://jsfiddle.net/rWz69/

Любая помощь по этому вопросу будет более чем признателен!

1 Ответ

11 голосов
/ 10 сентября 2010

Вы можете использовать обработчик .live(), например:

$(document).on("click", "[id^=wildcard_] > div > a" , function() {
  $(this).replaceWith($(this).text());
});

Вот ваш пример скрипки, обновленный / работающий с кодом выше :)

...