需要帮助理解jquery delegate()函数

时间:2012-02-25 13:46:56

标签: events jquery jquery-callback jquery-delegate

我很难理解jquery的.delegate函数的语法。假设我有以下内容:

$(".some_element_class").delegate("a", "click", function(){

    alert($(this).html());

});

我知道a元素是应用click事件的元素。我知道,一旦我们点击a元素,就会触发事件click并调用回调函数。但.delegate之前的目的是什么?在这种情况下,.some_element_class的目的是什么?如何阅读上述内容,包括.some_element_class?另外,在上面的例子中,$(this)代表什么?它是代表a元素还是代表.some_element_class

请有人,对此有所了解。

谢谢

4 个答案:

答案 0 :(得分:1)

表示delegate()上会调用.some_event_class。并且a是选择器字符串,click是事件类型字符串& function()是eventhandler函数。 delegate()方法用于处理“直播事件”,并且使用静态事件bind()。我希望这有帮助。如果您有任何疑问,请随时询问

bind()&之间的差异delegate()

//Static event handlers for static links
$("a").bind("",linkHandler);

//Live event handlers for dynamic parts of the document
$(".dynamic").delegate("a", "mouseover", linkHandler);

摘要:它们只是将事件处理程序绑定到特定文档元素的方法。

答案 1 :(得分:1)

这会减少事件绑定。

这基本上只在a tags的{​​{1}}内设置一个事件,而不是直接将事件绑定到.some_element_class

http://api.jquery.com/delegate/

http://api.jquery.com/on/

  

从jQuery 1.7开始,.delegate()已被.on()方法取代。   然而,对于早期版本,它仍然是最有效的手段   使用事件委托。有关事件绑定和委派的更多信息   在.on()方法中。通常,这些是等效的模板   对于这两种方法:

a tags

答案 2 :(得分:1)

  

“...... .delegate之前的目的是什么?”

  • 委托绑定到.some_element_class元素。

  • .some_element_class

  • 内的每次点击时触发该委托
  • 该委托测试点击的内容,因此您的处理函数只会 运行...

    • 点击的实际元素与"a"选择器或
    • 匹配
    • 点击的实际元素的任何祖先({1}}的后代与.some_element_class选择器匹配。

"a"

因此,您可以看到只有一个处理程序绑定到容器。它分析容器内的所有点击,如果单击的元素(或其嵌套的祖先之一)与selector参数匹配,则您的函数将运行。


因为只有一个封闭处理程序,它将适用于添加到容器中的未来元素......

<div class="some_element_class">  <!-- delegate handler is here -->

    <div>won't trigger your handler</div>
    <a>will trigger your handler</a>
    <a><span>will trigger</span> your handler</a>

</div>

  

此外,在上面的示例中,<div class="some_element_class"> <!-- delegate handler is here --> <div>won't trigger your handler</div> <a>will trigger your handler</a> <a><span>will trigger</span> your handler</a> <!-- this element newly added... --> <a><span>...will also trigger</span> your handler</a> </div> 表示什么?”

$(this)将代表与this选择器匹配的元素。

答案 3 :(得分:0)

a实际上只是一个过滤选择器,会发生正常的点击事件绑定到.some_element_class,并且只要事件触发,事件目标就会遍历到{{1查看是否存在与过滤选择器匹配的元素(标记名.some_element_class)。如果是,则在a设置为与冒泡路径中的this选择器匹配的第一个元素时触发您的回调。

您可以使用bind执行类似的操作:

a