2009-08-12 249 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 
} 
}); 

没有更多的代码,很难更准确。