【问题标题】:jQuery event fires on doc readyjQuery 事件在文档就绪时触发
【发布时间】:2011-02-04 22:53:05
【问题描述】:

我正在尝试在我的表单上设置按钮的单击事件,但由于某种原因,我出现了奇怪的行为。当我将 click 事件绑定到不带参数的函数时,事情似乎工作正常。但是,当我将事件与带参数的函数绑定时,该事件会在文档准备就绪和单击时触发。有什么想法吗?

示例 1:

这会在准备就绪和单击按钮时触发警报框。

jQuery(document).ready(function(){
   $('myButton').click(alert('foo'));
});

示例 2:

这会导致警报框在单击按钮时仅触发。

jQuery(document).ready(function(){
   $('myButton').click(wrapper);
});

// External js file
function wrapper(){
   alert('bar');
}

【问题讨论】:

  • 是的,downvote 完全有道理。

标签: jquery


【解决方案1】:

你需要一个anonymous function (read this for more complete explanation),像这样:

jQuery(function() {
  $('myButton').click(function() {
    alert('foo');
  });
});

点击处理程序接受一个函数,该函数内部发生的事情取决于您,但它不能传递事件...javascript 不能以这种方式工作。当您将代码包装在匿名函数中时,整个事情都会执行,而不管内部的函数或参数如何。

【讨论】:

    【解决方案2】:

    $('myButton').click(alert('foo')); 调用alert('foo')(弹出警报),然后将点击事件绑定到alert 的返回值(这与警报不相同)。您可能想要使用匿名函数,就像 Nick 建议的那样。

    【讨论】:

      【解决方案3】:
      jQuery(document).ready(function(){
         $('myButton').click(function(){
              wrapper();
          });
      });
      

      【讨论】:

        【解决方案4】:

        这是一个经典的错误。您所做的实际上是在单击事件侦听器中给出返回值,而不是在 javascript 函数对象中。

        如果你坚持使用upper方法,你将不得不使用eval(最好不要使用)

        您的 lower 方法有效,匿名函数也有效。

        【讨论】:

          【解决方案5】:

          Wrapper 是一个 Function 而 Alert 是一个 Window 对象的方法...

          HTH

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-26
            • 1970-01-01
            • 2013-01-06
            • 1970-01-01
            相关资源
            最近更新 更多