加载中...

delegate()3.0-


概述    .delegate( selector, eventType, handler(eventObject) )

返回值:jQuery

描述:为所有匹配选择器(selector参数)的元素绑定一个或多个事件处理函数,基于一个指定的根元素的子集,匹配的元素包括那些目前已经匹配到的元素,也包括那些今后可能匹配到的元素。

  • V : 1.4.2.delegate( selector, eventType, handler(eventObject) )

    • selector
      类型: String
      选择器字符串,用于过滤器触发事件的元素。
    • eventType
      类型: String
      一个包含一个或多个用空格隔开的JavaScript事件类型的字符串,比如"click"或"keydown,"或自定义事件的名称。
    • handler(eventObject)
      类型: Function()
      每当事件触发时执行的函数。
  • V : 1.4.2.delegate( selector, eventType, eventData, handler(eventObject) )

    • selector
      类型: String
      选择器字符串,用于过滤器触发事件的元素。
    • eventType
      类型: String
      一个包含一个或多个用空格隔开的JavaScript事件类型的字符串,比如"click"或"keydown,"或自定义事件的名称。
    • eventData
      类型: Anything
      一个对象,它包含的数据键值对映射将被传递给事件处理程序。
    • handler(eventObject)
      类型: Function()
      每当事件触发时执行的函数。
  • V : 1.4.3.delegate( selector, events )

    • selector
      类型: String
      选择器字符串,用于过滤器触发事件的元素。
    • events
      类型: PlainObject
      一个对象,包含一个或多个DOM事件类型和函数并执行它们。

在jQuery 3.0中,.delegate()已被标记为弃用。从jQuery 1.7开始,它已经被.on()方法取代。所以我们不建议使用该方法。但是,对于早期版本,它仍然是使用事件代理(委派)最有效的方式。事件绑定和代理(委派)的更多信息请查看.on()方法。在一般情况下,这些是两种方法的等效的方法:

  1. // jQuery 1.4.3+
  2. $( elements ).delegate( selector, events, data, handler );
  3. // jQuery 1.7+
  4. $( elements ).on( events, selector, data, handler );

例如, 下面的 .delegate() 代码:

  1. $("table").delegate("td", "click", function() {
  2. $(this).toggleClass("chosen");
  3. });

是等价于下面使用.on()的代码:

  1. $("table").on("click", "td", function() {
  2. $(this).toggleClass("chosen");
  3. });

要移除使用delegate()绑定的事件,查看.undelegate()方法。

传递和处理事件数据的方式和.on()的方式一样的。

Additional Notes:(其他注意事项:)

  • 自从.live()方法处理事件一旦传播到文档的顶部,live事件是不可能停止传播的。同样地,.delegate() 事件将始终传播给其中包含的被委托元素;同时,任何在 DOM 树中,比这些元素低的元素上绑定的相同事件,在 .delegate() 事件被调用的时候,也会被触发。因此,如果要在事件中阻止委托事件被触发,可以调用event.stopPropagation()或者返回false防止委派处理程序冒泡。

示例

实例

点击添加另一个段落。请注意, .delegate() 绑定所有段落的click事件 - 甚至是新的段落。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. p { background:yellow; font-weight:bold; cursor:pointer;
  6. padding:5px; }
  7. p.over { background: #ccc; }
  8. span { color:red; }
  9. </style>
  10. <script src="http://code.jquery.com/jquery-latest.js"></script>
  11. </head>
  12. <body>
  13. <p>Click me!</p>
  14. <span></span>
  15. <script>
  16. $("body").delegate("p", "click", function(){
  17. $(this).after("<p>Another paragraph!</p>");
  18. });
  19. </script>
  20. </body>
  21. </html>

运行一下

实例 每当段落的文字被点击时候,要显示一个警告框:

  1. $("body").delegate("p", "click", function(){
  2. alert( $(this).text() );
  3. });

实例

返回false,取消默认的行为,防止从它冒出来的,:

  1. $("body").delegate("a", "click", function() { return false; })

实例

要取消默认动作只有通过使用preventDefault方法。

  1. $("body").delegate("a", "click", function(event){
  2. event.preventDefault();
  3. });

实例

也可以绑定自定义事件。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. p { color:red; }
  6. span { color:blue; }
  7. </style>
  8. <script src="http://code.jquery.com/jquery-latest.js"></script>
  9. </head>
  10. <body>
  11. <p>Has an attached custom event.</p>
  12. <button>Trigger custom event</button>
  13. <span style="display:none;"></span>
  14. <script>
  15. $("body").delegate("p", "myCustomEvent", function(e, myName, myValue){
  16. $(this).text("Hi there!");
  17. $("span").stop().css("opacity", 1)
  18. .text("myName = " + myName)
  19. .fadeIn(30).fadeOut(1000);
  20. });
  21. $("button").click(function () {
  22. $("p").trigger("myCustomEvent");
  23. });
  24. </script>
  25. </body>
  26. </html>

运行一下


还没有评论.