библиотека jQuery нажмите кнопку функция не работает после 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 click.
7 ответов:
проблема в том, что .нажмите, работает только для элементов на странице. Вы должны использовать что-то вроде
on
Если вы подключаете будущие элементы$("#LangTable").on("click",".deletelanguage", function(){ alert("success"); });
при использовании
$('.deletelanguage').click()
чтобы зарегистрировать обработчик событий, он добавляет обработчик только к тем элементам, которые существуют в dom, когда код был выполненздесь нужно использовать обработчики событий на основе делегирования
$(document).on('click', '.deletelanguage', function(){ alert("success"); });
$('body').delegate('.deletelanguage','click',function(){ alert("success"); });
или
$('body').on('click','.deletelanguage',function(){ alert("success"); });
Так как класс добавляется динамически, вам нужно использовать делегация событие, чтобы зарегистрировать обработчик событий, таких как:
$('#LangTable').on('click', '.deletelanguage', function(event) { event.preventDefault(); alert("success"); });
это прикрепит ваше событие к любым якорям внутри
#LangTable
элемент, уменьшение объема того, чтобы проверить весьdocument
дерево элементов и повышения эффективности.
здесь скрипка
тот же код, что и у вас, но он будет работать на динамически создаваемых элементах.
$(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>'); });
событие click не существует в том месте, где оно определено. Вы можете использовать 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>'); });