2011-03-29 4 views
3

confirm과 같은 onclick 함수의 반환 값을 jQuery 함수로 가져 오는 방법이 있습니까?jQuery : 앵커에서 onclick 함수 반환 return

<a onclick="return confirm('Sure?');" class="delete" href="delete.php">Delete</a> 

이 주어진 구조와 나는 그것을 변화의 가능성이 없다 :

나는 참 또는 거짓 반환 확인을위한 온 클릭 이벤트가 연결되는 링크를 제공하고 있습니다.

$('a.delete').click(function() { 
    if (confirm_from_onclick == true) { 
     //do some more before really returning true and following the link 
    } 
}); 

답변

5

HTML 마크 업을 변경할 방법이 없으면 해당 노드에서 완전한 onclick 인라인 핸들러를 제거하고 눈에 거슬리지 않는 이벤트 처리기에서 제거해야합니다.

$(function() { 
    $('a').each(function(_, anchor) { 
     var onclk = anchor.onclick; // store the original function 
     anchor.onclick = null;  // delete/overwrite the handler 

     $(anchor).bind('click', function() { 
      if(onclk()) { 
       // do something 
      } 
      return false; // call stopPropagation() + preventDefault() 
     }); 
    });  
}); 

당신이 onclick 인라인 이벤트 핸들러를 처리하고 있기 때문에, 당신은 중지 또는 겸손하게 결합 된 이벤트 핸들러와 발사에서 그 막을 수 없습니다 :

이처럼 보일 수 있습니다. 항상 먼저 실행되므로 원본 이벤트를 완전히 삭제해야합니다.

실제로 함수를 저장할 필요가 없으며 onclicknull으로 설정하고 자신의 이벤트 처리기에서 논리를 다시 작성할 수도 있습니다. 나는 편의를 위해서만했다.

데모 : http://jsfiddle.net/em9KP/

+0

jAndy -이 좋은 솔루션입니다. 당신은이 비트를 설명 할 수 있겠습니까? $ ('a'). 각각 (함수 (_underscore_, 앵커), 특히 함수 (_underscore_, anchor) 부분은 없습니까? 명백히) – JackWilson

+0

@JackWilson :'.each()'메서드는 콜백에 두 가지를 넘겨 준다. * index *와 실제 * element *.이 스 니펫의 * index * 값에 대한 어플리케이션이 없으므로, "index"또는 "foobar"라고 쓸 수도 있습니다. – jAndy

+0

아주 좋은 해결책입니다, 정말 고마워요! – Tim

3

정말 간단한 대답을하고 원하는 것을 정확하게되지 않을 수도 있습니다,하지만 왜 그런 다음 내 모든 것을 처리, 앵커에서 "온 클릭"이벤트를 제거하지 : 그러나 나는 같은 것을 할 싶습니다 클릭 기능?

에서와 같이 함수 내부에 확인 대화 상자를 만드십시오.

<a class="delete" href="delete.php">Delete</a> 

$('a.delete').click(function(e) { 
    e.preventDefault(); 
    if (confirm('Sure?')) { 
     //do some more before really returning true and following the link 
    } 
}); 

편집 : 죄송합니다! 당신이 언급 한 부분을 놓친 것입니다. 그것은 설정 구조이고 당신은 그것을 바꿀 방법이 없습니다. 대안 작업.