jQuery事件对象是否可以添加自定义属性?

4

以下是示例代码:

$('a').mousedown(function(event)
   {
            event.ABC = true;

   });

$(window).mousedown(function(event)
    {
        console.log("event.ABC:",event.ABC);
         //outputs "undefined "

        if( event.ABC)
        {
          // do sth
        } 
        else
        {
            //let it go  
        }


    });

点击一个<a>元素会使窗口的点击事件不再起作用?这是你想要的吗? - pimvdb
6个回答

6

其他人已经提到,jQuery事件在每个回调函数中都会被重新创建,因此您添加到jQuery事件的任何属性都会丢失。

然而,jQuery事件有一个originalEvent属性,它在整个事件传播阶段中持续存在

不要使用event.ABC,而是可以直接使用event.originalEvent.ABC

注意:如果您打算广泛使用此功能,可以添加一个myAppData属性来存储所有数据,例如: event.originalEvent.myAppData.ABC。这样易于识别哪些事件属性是您自定义的,并降低了名称冲突的可能性。



1
你遇到的问题是每个回调函数都会创建一个新的事件对象,它不是一个全局对象,不能在每个事件回调函数之间传递。
最好的方法可能是在适当的作用域级别创建自己的EventArgs对象,并将您需要的所有属性添加到其中。

0

试一下这个

 $("*").mousedown(function(e){
e.ABC = "abcdef";
}); //place this code first

然后你可以像这样使用它

$("yourSelector").mousedown(function(e){ alert(e.ABC); // >> abcdef });

exemple


0
您可以向事件对象添加额外的数据。
$('a').bind('mousedown',{ABC:true},function(event)
  alert(event.data.ABC);
});

然而,该数据仅在该事件处理程序内可用,而不是绑定到窗口的处理程序。


0

输出未定义,因为每当触发事件时,就会创建新的事件对象。您只是修改了一些不同的事件对象。不幸的是,除了重写jQuery之外,没有其他方法可以解决这个问题。;) 尝试使用其他(全局)变量/对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接