jQuery TriggerHandler不会通过live触发keyup事件

时间:2010-05-03 16:37:15

标签: jquery

为什么我不能通过triggerHandler触发处理程序,如果它是通过live绑定的?

例如

  form.find('#code').live('change keyup',function(){
   process_code($(this));   
  });

窗口加载后的启动:

   /* Triggers */
   if(checkCookie('banner_ready_code'))
   {
    $('#form').find('#code').triggerHandler('keyup');
   }

什么都没发生......

如果我只是通过.change或.keyup绑定,则triggerHandler正在按预期正常工作。

如果是bug,请在哪里报告。太懒 :) 如果没有,请解释。 :)

1 个答案:

答案 0 :(得分:1)

不是错误。 triggerHandler()不会使事件冒泡,live()依赖于事件冒泡,因为处理程序位于DOM树的根目录下。

来自live()文档:http://api.jquery.com/live/

传递给.live()的处理程序永远不会绑定到元素;相反,.live()将一个特殊的处理程序绑定到DOM树的根目录。

没有处理程序直接绑定到<div>,因此事件会使DOM树冒泡。

来自triggerHandler()文档:http://api.jquery.com/triggerHandler/

使用.triggerHandler()创建的事件不会冒泡DOM层次结构;如果他们没有直接由目标元素处理,他们什么都不做。