2013-11-01 3 views
0

다음은 JQuery onclick 함수입니다. 이미지에 적용된 이벤트입니다.JQuery onclick 동적 변경

이 코드는 수신 된 데이터 값에 따라 onclick 이벤트를 변경합니다.
아래 코드와 같이 코드에 중단 점을 추가했습니다. 이상한 일은 처음 클릭 통역사가 정상적으로 한 번만 내 코드를 통과한다는 것입니다.

그러나 나는 2 시간을 클릭 할 때 통과 2 회

세 번째에

이 4 배

5 클릭 (8) 등을 통과 클릭

즉 기하 급수적으로 증가하고있다 콜 백업의 수는 클릭 당 호출 . 이제 내 질문이 왜 이런 일이 일어나는가이다.

참고 : 모든 변수는 올바르게 정의되어 있지만 단순화를 위해 나머지 코드는 스트라이프 처리됩니다. 난 이미 시도 것을

updateUser = function (user, block) { 
    jQuery.ajax({ 
     type: "POST", 
     url: "index.php?option=com_contentbuilder&controller=myActicateUser", 
     data: data, 
     dataType: "json", 
     success: function (data) { 
      if (data) { 
       var pinID = "#pin" + user; 
       user = data[0]; 
>>breakpoint  if (data[1] === "0") { 

        jQuery(pinID).click(function() { 
         updateUser(user, "1") 
        }); 
        jQuery(pinID).attr("src", tack); 


       } else if (data[1] === "1") { 

        jQuery(pinID).click(function() { 
         updateUser(user, "0") 
        }); 
        jQuery(pinID).attr("src", tick); 

       } 
      } 
     } 
    }); 
} 

는이 같은 요소를 추가 click 핸들러를 결합 updateUser를 호출 할 때마다 때문이다

if(data[1]==="1"){ 
          jQuery(pinID).unbind(); 
          jQuery(pinID).removeAttr("onclick"); 
          jQuery(pinID).click(function(){updateUser(user,"0")}); 
} 
+0

답변으로 Mary 누구든지 –

+0

답변으로 Mary 누구든지 –

답변

3

바인딩, 당신이 당신을 도움이 될 수 있음

jQuery(pinID).live("click",function(){updateUser(user, "1")}) 

or 

jQuery(pinID).on("click",function(){updateUser(user, "1")}) 

를 사용할 수 있습니다 밖으로. 이는 동적으로 바인딩하고 요소에 대한 클릭 이벤트를 처리하기 때문입니다.

4

입니다.

어느 첫번째 unbind (jQuery(pinID).unbind('click').click(...)) 또는 추가 jQuery 플러그인을 기반으로 한 번만 updateUser 외부 대신를 클릭

+0

내 질문을 편집했습니다. 내가 몹시 몹시 노력한 방법은 에디션 된 부분 – arslan

+0

@arslan에있다.'(data [1] === "0")'시나리오에서도 똑같이해야 할 것이다. (* 또한 onclick' 속성을 제거 할 필요가 없다. *) –

-2

게이와 아난드 모두에게 감사합니다. 이유는 내가 내 자신의 답변을 쓰고 있습니다. 두 대답을 모두 사용하여 문제를 해결했기 때문입니다. 왜 내 자신의 대답을 쓰는 것이 좋을까요? 내가 뭘 발견

내 이벤트 내가 행 다음에

jQuery(pinID).unbind(); 

위의 바인딩을 해제 할 수 없음을 WASS를 관찰 지금의 태그

<img src="hello.png" onlick="updateUser()"/> 

에게 registring되어 다음

을 따를 때 그입니다 onclick 이벤트가 img 태그의 onclick 속성이 제거되지 않는 한. 그래서 바인딩을 해제하기 전에 나는 다음 문장을 추가했다.

jQuery(pinID).attr("onclick", ""); 

그것이 작동하기 시작했다.그러나 다른 한 문제는

success: function(data) { 

          if (data){ 
           var pinID="#pin"+user; 
           user=data[0]; 
           if(data[1]==="0"){ 
            jQuery(pinID).attr("onclick",""); 
            jQuery(pinID).unbind(); 
            jQuery(pinID).on("click",function(){updateUser(user,"1")}); 
            jQuery(pinID).attr("src",tack); 


           } 
           else if(data[1]==="1"){ 
            jQuery(pinID).attr("onclick",""); 
            jQuery(pinID).unbind();           
            jQuery(pinID).on("click",function(){updateUser(user,"0")}); 
            jQuery(pinID).attr("src",tick); 
           } 


          } 

      } 
을 따를

jQuery(pinID).on("click",function(){updateUser(user, "1")}) 

그리고 최종 작업 코드를했다 아난드 제안한 또한 바인딩 해제 그래서 내가 위의 라인을 교체

jQuery(pinID).click(function() { 
        updateUser(user, "0") 
       }); 

에 등록 이벤트를 작동하지 않는 것이 었습니다

두 분 모두 다시 한 번 감사합니다. Anand개비

+0

UnBind()를 사용해보십시오, 작동 할 것입니다. –

+0

아니요 바인드 해제만으로 작동하지 않았습니다. 당신도이 jQuery (pinID) .attr ("onclick", ""); – arslan

+0

이 상황을 디버깅하는 데 하루 종일 낭비했습니다. 위의 대답은 작업 코드를 포함합니다. – arslan