关于jQuery bind()的问题

时间:2011-08-23 18:18:15

标签: javascript javascript-events jquery

我有一个关于jQuery bind的工作的问题。每当我们在任何元素上使用bind方法并编写一些回调代码时,是否会在绑定事件上执行完整的代码“每次”或者jQuery只记得输出/该代码的结果并仅执行该结果..

我们还可以在回调代码中生成另一个事件吗?

就像它是如何工作的那样。

3 个答案:

答案 0 :(得分:1)

在每个事件中从头开始评估回调函数 这里:

http://jsfiddle.net/turaaa/wxBF4/

您可以看到每次点击都会产生不同的结果。

是的,您可以轻松地在回调中生成另一个事件

答案 1 :(得分:1)

每次触发事件时,都会执行绑定到指定目标上的事件的所有函数。这些回调函数的返回值用于确定事件是否应继续传播。

作为脚本的一部分调用的函数与事件回调之间存在一些显着差异:

  1. jQuery规范化回调,使其在绑定目标的上下文中执行(即this引用事件被分配到的绑定元素)
  2. 自动提供回调参数
  3. 事件在触发事件时异步执行,因此可能会对变量值产生一些意外后果(如i之类的循环索引在调用回调时可能会有最终值。
  4. 由于回调只是函数,它们可以执行任何其他函数可以执行的任何操作,包括调用trigger。注意不要因为对同一事件的递归函数调用而导致自己无限循环。

    你不想打电话:

    function foo()
    {
      foo();
    }
    

    同样,你不想打电话:

    $('#foo').click(function(){
      //short form for .trigger('click')
      $(this).click();
    });
    

答案 2 :(得分:-1)

您可以使用.trigger()轻松生成另一个事件。

修改: 阅读并重新阅读您的第一个问题。我相信您正在寻找的答案是每次执行 时执行bind()。但是,在回调代码更改DOM的情况下,可以添加元素,而不会绑定该元素上的事件。

考虑添加按钮<input id="mybutton" type="button"...的代码。如果在所有代码中使用$("#mybutton").bind("click"),则此新元素将不会绑定任何事件。为了获得“点击”来执行某些操作,您必须在将其添加到DOM之后将其绑定,或者您必须使用.live()或.delegate()而不是.bind()。