Функция jQuery click не работает после вызова ajax? - программирование
Подтвердить что ты не робот

Функция jQuery click не работает после вызова ajax?

Функция jQuery click отлично работает здесь

<div id="LangTable"><a class="deletelanguage">delete</a></div>    

$('.deletelanguage').click(function(){
    alert("success");
});

, но если я установил некоторый <a> ajax, $('.deletelanguage').click не работает.

например

function CreateRow(jdata) { 
    $('#LangTable').append('<a class="deletelanguage">delete</a>');
}

$.ajax({        
    url: "/jobseeker/profile/",
    success: CreateRow
});

Теперь $('.deletelanguage').click для последнего <a> не работает.

Пример jsfiddle: http://jsfiddle.net/suhailvs/wjqjq/

Примечание: CSS отлично работает здесь.

Я хочу, чтобы эти недавно добавленные <a> работали с кликом jQuery.

4b9b3361

Ответ 1

Проблема заключается в том, что .click работает только для элементов, уже находящихся на странице. Вы должны использовать что-то вроде on, если вы подключаете будущие элементы

$("#LangTable").on("click",".deletelanguage", function(){
  alert("success");
});

Ответ 2

Когда вы используете $('.deletelanguage').click() для регистрации обработчика события, он добавляет обработчик только к тем элементам, которые существуют в dom при выполнении кода

вам нужно использовать обработчики событий на основе делегаций.

$(document).on('click', '.deletelanguage', function(){
    alert("success");
});

Ответ 3

$('body').delegate('.deletelanguage','click',function(){
    alert("success");
});

или

$('body').on('click','.deletelanguage',function(){
    alert("success");
});

Ответ 4

Поскольку класс добавляется динамически, вам нужно использовать делегирование событий, чтобы зарегистрировать обработчик событий, например:

$('#LangTable').on('click', '.deletelanguage', function(event) {
    event.preventDefault();
    alert("success");
});

Это добавит ваше событие к любым якорям в элементе #LangTable, уменьшая объем проверки всего дерева элементов document и повышения эффективности.

FIDDLE DEMO

Ответ 5

Здесь FIDDLE

Такой же код, как ваш, но он будет работать с динамически создаваемыми элементами.

$(document).on('click', '.deletelanguage', function () {
    alert("success");
    $('#LangTable').append(' <br>------------<br> <a class="deletelanguage">Now my class is deletelanguage. click me to test it is not working.</a>');
});

Ответ 6

Событие клика не существует в том месте, где определено событие. Вы можете использовать live или делегировать событие.

$('.deletelanguage').live('click',function(){
    alert("success");
    $('#LangTable').append(' <br>------------<br> <a class="deletelanguage">Now my class is deletelanguage. click me to test it is not working.</a>');
});

Ответ 7

Я протестировал простое решение, которое работает для меня! Мой javascript был в отдельном файле js. Я сделал то, что я поместил javascript для нового элемента в html, который был загружен ajax, и он отлично работает для меня! Это для тех, у кого есть большие файлы javascript!