Подтвердить что ты не робот

Jquery click не работает с созданным контентом ajax

Я использую $(".button").on("click", function(){ });

чтобы щелкнуть по кнопке, которая находится в контейнере, но затем выполняется вызов ajax и содержимое обновляется с новым материалом, а затем, когда я пытаюсь нажать .button, он не будет работать... ничего не получится, когда я нажму кнопку.

Я даже пробовал

$(".button").live("click", function(){ });

или

$(".button").click(function(){ });

Как я могу заставить его работать?

РЕДАКТИРОВАТЬ: my html:

<div class="container">
   <ul>
       <li>item1</li>
       <li>item2</li>
       <li>item3</li>
   </ul>
   <input type="button" value="reload" class="button" />
</div>
4b9b3361

Ответ 1

Должно быть сделано таким образом.

$('body').on('click', '.button', function (){
        alert('click!');
    });

Если у вас есть контейнер, который не изменяется во время запроса ajax, это более эффективно:

$('.container').on('click', '.button', function (){
        alert('click!');
    });

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

Ответ 2

Хорошо, я решил свою проблему, используя функцию .on() правильно, так как у меня отсутствовал один параметр.

вместо

$(".button").on("click", function() { } );

Я использовал

$(".container").on("click", ".button", function() { } );

Ответ 3

Вместо:

$(".button").on("click", function() { } );

Я использовал:

$(".container").on("click", ".button", function() { } );

Я использовал это, и он сработал.

Ответ 4

Это то, что вы пытаетесь сделать? Заметьте, я помещаю $.on() в родительский, но выбираю .button для действия.

.on(события [, селектор] [, данные], обработчик (eventObject))

селектор Селекторная строка для фильтрации потомков выбранного элементы, которые запускают событие. Если селектор имеет значение null или опущен, событие всегда срабатывает, когда оно достигает выбранного элемента.

http://api.jquery.com/on/

<div id="stuff">
    <button class="button">Click me!</button>
    <p>Stuff</p>
</div>

var $stuff = $('#stuff'),
    ajaxContent = $stuff.html();

$stuff.on('click', '.button', function(){
    $.get('/echo/html/', function(){
        $stuff.empty();
        console.log($stuff.html());
        alert($stuff.html()); // Look behind, #stuff is empty.
        $stuff.html(ajaxContent);
        console.log($stuff.html());
    });
});

http://jsfiddle.net/62uSU/1

Другая демонстрация:

var $stuff = $('#stuff'),
    ajaxContent = $stuff.html(),
    $ajaxContent,
    colors = ['blue','green','red'],
    color = 0;

$stuff.on('click', '.button', function(){
    $.get('/echo/html/', function(){
        color++;
        if (color == colors.length) color = 0;
        console.log($stuff.html());
        alert($stuff.html());
        $ajaxContent = $(ajaxContent);
        $stuff.append($ajaxContent).css('color', colors[color]);
        console.log($stuff.html());
    });
});

http://jsfiddle.net/62uSU/2/