jquery 클릭이 ajax 생성 콘텐츠에서 작동하지 않습니다.


79

나는 사용하고있다 $(".button").on("click", function(){ });

컨테이너에있는 버튼을 클릭하면 ajax 호출이 완료되고 콘텐츠가 새로운 내용으로 업데이트되고 클릭하려고하면 .button작동하지 않습니다. 버튼 을 클릭 해도 아무것도 반환되지 않습니다.

나는 심지어 시도했다

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

또는

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

어떻게 작동시킬 수 있습니까?

편집 : 내 HTML :

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

1
ajax 호출이 반환하는 내용을 보여주세요.
ron tornambe

그리고 리스너를 연결하는 나머지 jQuery. 당신이 설명하는 것은 정확히 live처리해야하는 것이므로 작동하지 않는 것이 이상합니다.
Brandan 2012

나는 그들을 클릭하고 .on ( "click")을 사용하여 자바 스크립트에서 "test"를 에코하는 ul을 가지고 있지만 버튼을 클릭하면 ajax 호출을 수행하고 ul을 다시로드합니다. 버튼을 클릭하십시오 .. 아무것도 반환하지 않습니다.
stergosz

답변:


158

이렇게해야합니다.

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

ajax 요청 중에 변경되지 않는 컨테이너가있는 경우 이것이 더 성능이 좋습니다.

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

항상 동적 요소를 포함 할 가장 가까운 정적 요소에 대리자 이벤트를 바인딩하십시오.


답변 해 주셔서 감사합니다! 여전히 이것이 매우 이상하고 이런 식으로 사용하는 것이 좋지 않다고 생각합니다. 위시 JQuery와는 상황이 이런 종류의 처리하는 더 좋은 방법이 있었다
미구엘 스티븐스

1
@MiguelStevens, 개념을 읽고 이해 한 후에 문서 를 읽으면 이상하지 않고 완벽하게 이해 될 것입니다.
gdoron 모니카 지원하고

하지만 어떻게 부모를 쓸까요 ... $ ( "input # someId"). autocomplete ({// some code}); ... 여기에 이벤트가 없습니다 ..
Dragon

1
@Sadaquat, 필요한 모든 세부 정보가 포함 된 전체 질문을 다른 스레드에 작성하는 것이 좋습니다. 답변을받지 못한 경우 댓글로 저에게 핑을 보내 주시면 최선을 다해 도와 드리겠습니다.
gdoron 모니카 지원하고있다

1
마침내 내가 찾고 있던 해결책을 찾았습니다! 감사합니다
KP

40

좋아, 하나의 매개 변수가 없기 때문에 .on () 함수를 올바르게 사용하여 문제를 해결했습니다.

대신에

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

나는 사용했다

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

1
참고로 selector 인수는 필수 가 아니지만이 경우에 필요합니다.
Jared Farrish

해결해 주셔서 감사합니다. +1
Aldry Wijaya 2013-06-13

선택자 인수가 필요하지 않지만이 경우에 필요한 이유는 무엇입니까?
ryentzer

이 경우 선택기가 다시 실행되기 때문이라고 생각하지만 포함되지 않으면 선택기로 잡은 원래 실행 된 항목 목록에 캡처되지 않습니다.
Bing

8

대신에:

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

나는 다음을 사용했다 :

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

나는 이것을 사용했고 효과가 있었다.


3

이것이 당신이하려는 일입니까? 를 $.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/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.