2009-08-12 166 views
4

如果你知道更好的方法來做到這一點,那麼請讓我知道。 對我有一個頁面,其中將包含大量的按鈕,圖表和表格。 我已閱讀有關停止事件傳播的內容,這就是我將要使用的內容。 我想啓用cerain元素的幫助。我有一個複選框,它可以在啓用了div的幫助中更改光標。我想要做的是在正常的點擊行爲之前添加一個幫助功能。jquery prepend點擊處理程序

基本上就是這樣。

<input type="button" value="Click me" onclick="alert ('hello')" /> 

我想要的是,如果被點擊複選框我添加了一個CSS類(已完成),然後我的正常的單擊之前添加點擊處理程序。當單擊該元素時,將運行幫助功能,並且不會觸發默認的按鈕單擊處理程序。當幫助複選框未選中時,我想刪除幫助功能。 我意識到,我可以hardocde這個每個元素,並檢查輔助功能,看看是否複選框被選中。但我更喜歡更通用的方式。

感謝

約翰

回答

8
 $(":button").each(function() { 

      // your button 
      var btn = $(this); 

      // original click handler 
      var clickhandler = btn.attr("onclick"); 
      btn.attr("onclick", "return false;"); 

      // new click handler 
      btn.click(function() { 

       if ($("#chkbox").attr("checked") == true) { 

        // TODO: show your help 
        // TODO: catch event 

       } 
       else { 

        clickhandler(); 

       } 
      }); 
     }); 
+0

非常好,正是我需要的感謝 – John 2009-08-12 10:59:42

+0

感謝您簡化我現有的一些代碼。 – IEnumerator 2009-11-13 20:33:25

0

我想你想玩弄綁定/在這種情況下解除綁定 - 見http://docs.jquery.com/Events/unbind#typefn

選擇可以綁定新的點擊事件的更新按鈕,複選框時 - 和稍後解除它們。

你可能也有爲了抑制默認的點擊行爲與Event.preventDefault(http://docs.jquery.com/Events/jQuery.Event)的工作,如果你不希望它

你會使用的東西的喜歡:

$("a").bind("click", function(event){ 
if ($("#helpcheckbox").attr('checked') 
{ 
    event.preventDefault(); 
    // do something 
} 
}); 

沒有更多的代碼,很難更準確。