2016-06-09 3 views
1

나는 jquery 함수를 사용하여 체크 상자가 선택되어 있는지 확인한 다음 이에 따라 div를 표시하거나 숨 깁니다. 또한 클래스에 "disabled-price"클래스가있는 div의 새 부분을 추가하는 다른 함수가 있으므로 새 부분을 추가 할 때 함수를 다시 실행합니다.jquery 함수가 다시 시작될 때 변경되지 않음

그러나 거기에서 "변경"이벤트가 더 이상 트리거되지 않습니다. 첫 번째 부분은 작동하지만 두 번째 부분은 작동하지 않습니다.

function disableInfo() { 

    //first part 
    var $disabledInfo = $('#invalidityInfo'); 
    if($disabledInfo.is(':checked')) { 
     $('.disabled-price').show(); 
    } else { 
     $('.disabled-price').hide(); 
    } 

    //second part 
    $disabledInfo.unbind('change'); 
    $disabledInfo.change(function() { 
     if($disabledInfo.is(':checked')) { 
      $('.disabled-price').show(); 
     } else { 
      $('.disabled-price').hide(); 
     } 
    }); 
} 

어떤 아이디어가 있습니까?

+0

왜 이벤트를 다시 언 바인딩()/바인드()해야합니까? 요소가 변경되지 않았으므로 이벤트를 계속 사용할 수 있어야합니다. –

+0

어쨌든 작동하지 않았기 때문에 사실이 줄을 추가했습니다 ... 두 번째로는 변경 이벤트가 발생하지 않았거나 없으므로 – symdev

+0

페이지에 동일한 'id'를 가진 여러 요소가 있습니까? 요소가 DOM에 동적으로 추가됩니까? –

답변

0

동적 요소에 이벤트를 캡처하기 위해 다음을 사용할 수 있습니다

// wait for the document to be ready. 
$(function(){ // equivalent to $(document).ready(function(){ 

    var $disabledInfo = $('#invalidityInfo'); 

    // initial check 
    if($disabledInfo.is(':checked')) { 
     $('.disabled-price').show(); 
    } else { 
     $('.disabled-price').hide(); 
    } 

    // create event listener 
    // use .on or .delegate to catch dynamic elements that are added on the fly 

    $('body').delegate('change','#invalidityInfo',function(){ 
     if($this.is(':checked')) { 
      $('.disabled-price').show(); 
     } else { 
      $('.disabled-price').hide(); 
     } 
    }); 


}) 

는 희망이 도움이 :

.delegate(selector, eventType, handler)

또는 여기

.on(events [, selector ] [, data ], handler)

은 예입니다 .

+0

안녕하세요, 몇 가지 새로운 div를 추가 할 때 함수를 다시 시작하려고하기 때문에 초기화하지 않아도됩니다 (클래스 "disabled-price") 내 페이지 – symdev

+0

에 "disabled-price"클래스가있는 div를 동적으로 추가 하시겠습니까? – Ismail

+0

이 경우 @symdev는'$ disabledInfo.change ('' ''$ disabledInfo.on ('change','')로 바꾸려고 시도했는데 – Ismail

관련 문제