2016-06-06 1 views
0

좋아요. 두 개의 AJAX 메소드를 실행하는 사용자 정의 폼에서 버튼을 사용하는 곳에 문제가 있습니다.이 두 함수는 올바른 방식으로 처음 선택 될 때 작동합니다. 내가 겪고있는 문제는 이벤트 핸들러가있는 클래스를 추가/삭제 한 후에 동일한 함수를 다시 실행하려고 시도한 후 다시 실행하지 못하고 다시 사용할 수 없다는 것을 의미합니다.jQuery 이벤트는 클래스 선택기를 다시 적용한 후에 실행되지 않습니다.

내 연구에서이 문제는 jQuery 이벤트 위임이며 문서를 읽은 후 내 원래의 클릭 기능을 변경 한 후 이벤트 핸들러를 다시 이해해야한다는 것을 알았습니다.

$(document).ready(function() { 
     $(".checkButton").on('click', function() { 
      var objID = this.id; 
      $.ajax({ 
       url: "index.php?system=testimonials&task=update", 
       type: 'POST', 
       data: {val: objID}, 
       success: function (data, textStatus, jqXHR) 
       { 
        $("#testimonialSpan" + objID).removeClass("label-warning"); 
        $("#testimonialSpan" + objID).addClass("label-success"); 
        $("#testimonialSpan" + objID).text("Approved"); 
        $("#testimonialTick" + objID).removeClass("fa-check"); 
        $("#testimonialTick" + objID).addClass("fa-times"); 
        $("#" + objID).removeClass("checkButton"); 
        $("#" + objID).addClass("timesButton"); 
       }, 
       error: function (jqXHR, textStatus, errorThrown) 
       { 
        alert(textStatus + errorThrown + jqXHR); 
       } 
      }); 
     }); 

     $(".timesButton").on('click', function() { 
      var objID = this.id; 
      $.ajax({ 
       url: "index.php?system=testimonials&task=update", 
       type: 'POST', 
       data: {times: objID}, 
       success: function (data, textStatus, jqXHR) 
       { 
        $("#testimonialSpan" + objID).removeClass("label-success"); 
        $("#testimonialSpan" + objID).addClass("label-warning"); 
        $("#testimonialSpan" + objID).text("Pending"); 
        $("#testimonialTick" + objID).removeClass("fa-times"); 
        $("#testimonialTick" + objID).addClass("fa-check"); 
        $("#" + objID).removeClass("timesButton"); 
        $("#" + objID).addClass("checkButton"); 
       }, 
       error: function (jqXHR, textStatus, errorThrown) 
       { 
        alert(textStatus + errorThrown + jqXHR); 
       } 
      }); 
     }); 
    }); 

나는 가까이 있지만 나는이 기능을 예상대로 만들 수 없다고 생각합니다.

+0

위임 된 이벤트에서 벗어나 이벤트를 직접 첨부 한 후에도 여전히 한 번만 실행됩니까? 아니면 전혀 실행하지 않습니까? 당신이 그들을 위임하지 않았으니 지금 겪고있는 것은 무엇입니까? 직접 이벤트 첨부는 다시 적용되지 않습니다. 그것들은 그 요소들에 직접 부착되어 있습니다. 요소를 변경하면 DOM에서 이벤트를 제거하지 않는 한 이벤트에 영향을 미치지 않아야합니다. 이벤트를 다시 배치하려는 경우 jQuery에 연결된 이벤트를 남겨 두라고 말할 수도 있습니다. 이벤트 위임은 해당 이벤트를 조상에게 첨부 한 다음 이벤트를 전달합니다. 선택기와 일치하는 요소 – AtheistP3ace

+0

나는 틀린 문서를 읽었을 가능성이있다. 새로운 요소가 생성되지 않았으며, 현재 요소는 내부에서 반대의 클래스를 가지도록 클래스가 변경되었다. 나의 이전의 이해는 선별자가 존재하는 한 정확한 방법이 발사된다는 것입니다. –

+0

선택기가 여전히 일치하면 예가 계속 실행됩니다. 변경할 클래스를 선택하면 위임 된 이벤트를 계속 사용할 수 있습니다. 여러 클래스를 사용하면 클래스를 선택하여 위임에 사용할 수 있습니다. 그런 다음 다른 클래스를 사용하여 사물을 변경하면 위임에 사용하는 클래스를 변경하지 마십시오. 위 코드에서와 같이 이벤트를 직접 첨부하더라도 작동합니다. 나는 아직도 당신이 어떤 문제를 겪고 있는지 확실하지 않습니다. – AtheistP3ace

답변

1

사용 $(document).on('click', '.checkButton', function(){}); 대신 $(".checkButton").on('click', function(){}); 및 IT 요소에없는 문서에 이벤트를 바인딩 대신 $(".timesButton").on('click', function() {});

$(document).on('click', '.timesButton ', function(){});. 선택기가있는 요소를 클릭 할 때마다 해당 요소가 실행됩니다.

+0

감사합니다. Ravisha 나는 단순한 뭔가를 놓쳤다는 것을 알고있었습니다. :-) –

관련 문제