示例代码如下:
$('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
}
});
答案 0 :(得分:5)
其他人已经提到为每个回调重新创建jQuery事件,这就是为什么你添加到jQuery事件的任何属性都会丢失。
但是,jQuery事件具有originalEvent
属性,确实在整个事件传播阶段持续存在。
而不是event.ABC
,您可以event.originalEvent.ABC
。
注意:如果您打算广泛使用它,您可能需要添加myAppData属性来存储您的所有数据,即event.originalEvent.myAppData.ABC
。这样可以轻松识别哪些事件属性是您的自定义属性,还可以减少名称冲突的可能性。
答案 1 :(得分:4)
虽然我不确定你想要做什么,但我猜想如果你不必弄乱事件对象会更容易。只需在点击<a>
时设置标记变量:
var eventABC = false;
$('a').mousedown(function() {
eventABC = true;
});
$(window).mousedown(function() {
console.log("eventABC:", eventABC);
//outputs true if <a> clicked, false otherwise
if(eventABC) {
// do sth
} else {
//let it go
}
eventABC = false;
});
但是你可以在jQuery中触发事件。像这样:
$('a').click(function() {
$(window).trigger("eventABC", ['CustomProperty1', 'CustomProperty2']);
return false;
});
$(window).bind('eventABC', function(event, param1, param2) {
alert("eventABC triggered: " + param1);
});
答案 2 :(得分:1)
您的示例遇到的问题是为每个回调创建了新的事件对象,它不是传递给每个事件回调函数的全局对象。
您最好的选择可能是在适当的范围级别创建自己的EventArgs对象,并将所有属性添加到您需要的位置。
答案 3 :(得分:0)
输出未定义,因为无论何时触发事件,都会创建新的事件对象。你刚刚修改了一些不同的事件对象。不幸的是,除了重写jQuery之外没有办法做到这一点。 ;)尝试使用其他一些(全局)变量/对象。
答案 4 :(得分:0)
您可以向事件对象添加其他数据。
$('a').bind('mousedown',{ABC:true},function(event)
alert(event.data.ABC);
});
但是,该数据仅在该事件处理程序中可用,而不是绑定到窗口的数据。
答案 5 :(得分:0)
试试这个
$("*").mousedown(function(e){
e.ABC = "abcdef";
}); //place this code first
然后你可以像那样使用它
$("yourSelector").mousedown(function(e){
alert(e.ABC); // >> abcdef
});