동적으로 작성된 입력에 대해 jQuery .on ( 'change', function () {}이 트리거되지 않음


147

문제는 동적으로 생성 된 입력 태그 세트가 있고 입력 값이 변경 될 때마다 트리거하는 기능도 있다는 것입니다.

$('input').on('change', function() {
  // Does some stuff and logs the event to the console
});

그러나 .on('change')페이지가로드 될 때 존재하는 항목에 대해서만 동적으로 생성 된 입력에 대해서는 트리거되지 않습니다. 불행하게도 같은 바인딩의 비트에서이 잎 내게 .on의미가를 대체 할 수 .live().delegate()대한 어떤의 모두 래퍼 .bind()/ :

다른 사람 이이 문제가 있거나 해결책을 알고 있습니까?

답변:


272

on함수에 선택기를 제공해야합니다 .

$(document).on('change', 'input', function() {
  // Does some stuff and logs the event to the console
});

이 경우 예상대로 작동합니다. 또한 문서 대신 일부 요소를 지정하는 것이 좋습니다.

더 나은 이해를 위해이 기사를 읽으십시오 : http://elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/


1
당신은 굉장합니다! 나도이 문제가 발생했습니다. 선택기를 두 번째 매개 변수로 추가 할 수 있다고 생각하지 않았습니다.
Tomatrox 2016 년

1
예, 전체 문서 대신 일부 요소로 좁히는 것이 좋았습니다. 동적 부분의 일부 div 이후에 다음을 사용하는 경우, 예를 들어 $ ( '# ajax_table'). on ( 'change', 'input ', function () {...
Raul Gomez

3
내 요소가 동적으로 만들어진 경우 나중에 어떻게 사용할 수 있습니까? $ this는 빈 객체를 제공합니다.
aleXela

그것은 매력처럼 작동합니다. 고마워요! 또한, 우리는 두 번 같은 논리를 추가 방지하기 위해 선택하셨습니다 ()를 사용할 수 있습니다)
benftwc

대체 구문 : $(document).on({ change: handleChange }, 'input');함수 추가 const handleChange = (event) => { $(event.target)...번거로운 일을 피하는 것이 좋습니다 this.
Dem Pilafian

23

이것을 사용하십시오

$('body').on('change', '#id', function() {
  // Action goes here.
});

참고로 @enrey는 $('#id')코드 대신에'#id'
Loaf

14

하나의 접근 방식을 적용 할 수 있습니다.

$("#Input_Id").change(function(){   // 1st
    // do your code here
    // When your element is already rendered
});


$("#Input_Id").on('change', function(){    // 2nd (A)
    // do your code here
    // It will specifically called on change of your element
});

$("body").on('change', '#Input_Id', function(){    // 2nd (B)
    // do your code here
    // It will filter the element "Input_Id" from the "body" and apply "onChange effect" on it
});

3
$("#id").change(function(){
    //does some stuff;
});

11
흠 ... 스 니펫에 대한 약간의 설명은 어떻습니까?
kleopatra

12
문서로드시 바인딩을 시도하기 때문에 동적으로 작성된 요소에서는 여전히 작동하지 않습니다. 그러나 @ArtemVyshniakov의 답변은 문서에 바인딩되며 요소 중 하나의 내용이 변경되면 두 번째 인수 때문에 필요한 요소를 대상으로 할 수 있습니다. (함수가 발생하면 트리거 소스가 두 번째 매개 변수와 일치하는지 확인 함)
FullyHumanProgrammer

이 코드는 사전로드 된 DOM을 사용할 때까지 작동하지 않습니다. 선택기를 문서 관련 변수로 전달해야합니다. api.jquery.com/on/#on-events-selector-data
benftwc

2

잠재적 인 혼란을 명확히하기 위해. DOM로드에 요소가있는 경우에만 작동합니다.

$("#target").change(function(){
    //does some stuff;
});

요소가 나중에 동적으로로드되면 다음을 사용할 수 있습니다.

$(".parent-element").on('change', '#target', function(){
   //does some stuff;
});


1

요소가 사용자 입력을 가져올 때 발생하는 '입력'이벤트를 사용할 수 있습니다.

$(document).on('input', '#input_id', function() {
  // this will fire all possible change actions
});

w3의 문서


1

당신이 사용할 수있는:

$('body').ready(function(){
   $(document).on('change', '#elemID', function(){
      // do something
   });
});

그것은 나와 함께 작동합니다.

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