为什么我不能通过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,请在哪里报告。太懒 :) 如果没有,请解释。 :)
答案 0 :(得分:1)
不是错误。 triggerHandler()
不会使事件冒泡,live()
依赖于事件冒泡,因为处理程序位于DOM树的根目录下。
来自live()
文档:http://api.jquery.com/live/
传递给.live()的处理程序永远不会绑定到元素;相反,.live()将一个特殊的处理程序绑定到DOM树的根目录。
和
没有处理程序直接绑定到<div>
,因此事件会使DOM树冒泡。
来自triggerHandler()
文档:http://api.jquery.com/triggerHandler/
使用.triggerHandler()创建的事件不会冒泡DOM层次结构;如果他们没有直接由目标元素处理,他们什么都不做。