2009-11-13 6 views
0

정상 링크의 이전 동작을 리 바인드 할 수있는 방법을 알고 싶습니다. 예 :이전 이벤트 리 바인드

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     $(this).data('onclick',$(this).attr('onclick')); 
     $(this).attr('onclick','return false;'); 
    }); 
}; 

function addDefaultBehaviour(objects){ 
    objects.each(function(){ 
     if($(this).data('onclick')!='') 
      $(this).attr('onclick',$(this).data('onclick')); 
    }); 
}; 

나는 각 링크의 데이터 객체의 이전 동작을 저장하기 위해 노력했다. 그러나 이것은 효과가 없었습니다! 제안 사항, 링크의 이전 및 기본 동작을 복원하는 방법! 들으

마르쿠스

+0

어떻게 이러한 방법을 요구하고있다 :

$(selector).unbind('click'); 

또한 차기에 대한 jQuery의 네임 스페이스 행사에 모습을 가질 수있다? jquery 객체를 전달하고 있는지 확인하거나 objects.each() 대신 $ (objects) .each()를 호출해야합니까? – Lobstrosity

답변

0

는 DOM setAttribute 또는 jQuery를 attr으로 할 것, 문자열로 onclick 및 기타 이벤트 핸들러를 처리하지 마십시오. 함수를 문자열로 적절하게 직렬화 할 수 없습니다. 당신이 사용하는 더 나을 것 제안

function falsefunction() { 
    return false; 
} 
function nofunction() { 
    return; 
} 

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     if (this.onclick) 
      $(this).data('onclick', this.onclick); 
     this.onclick= falsefunction; 
    }); 
} 

function restoreDefaultBehaviour(objects){ 
    objects.each(function(){ 
     var onclick= $(this).data('onclick'); 
     this.onclick= onclick? onclick : nofunction; 
    }); 
} 

그러나,이 같은 저글링 이벤트 핸들러는 일반적으로 냄새의 비트가와 대신 실제 함수 객체를 얻고 설정하는 등 element.onclick로 일반 DOM 이벤트 핸들러 속성을 사용하여 bind : $(this).attr('onclick')에 의해 반환

function preventDefault(event) { 
    event.preventDefault(); 
} 

function removeDefaultBehaviour(objects){ 
    objects.bind('click', preventDefault); // or objects.click(preventDefault); 
} 

function restoreDefaultBehaviour(objects){ 
    objects.unbind('click', preventDefault); 
} 
+0

많은 Thx! 당신의 2 번째 제안은 굉장합니다! ;) –

0

이 시도 :

function removeDefaultBehaviour(objects){ 
    objects.each(function(){ 
     $(this).data('onclick',$(this).attr('onclick').toString()); 
     $(this).attr('onclick','return false;'); 
    }); 
}; 

을 있으며, toString() 함수가 없으면, 당신은 onclick 이벤트의 코드 내용을받지 않습니다, 당신은 그냥 얻을 "온 클릭 (이벤트)" .

0

데이터는 대부분 기능입니다.

따라서 당신이 다른

$(this).attr('onclick',function(){return $(this).data('onclick')}); 

이 기능을 대신 설정되는 실행됩니다 다시 함수로 포장해야합니다 설정합니다.

관련 문제