触发它时是否可以获取原始事件对象。
在我的应用程序中,由于某些原因,我需要触发mousedown
点击。我需要原始事件来定义是否按下了鼠标右键。
var app = $("#app");
$("#something").on("mousedown", function(e){
app.trigger("somethingClicked", [{data: somedata}])
})
app.on("somethingClicked", function(event, data){
if (event.which == 3) {
// right mouse click
}
else{
// left mouse click
}
});
event.which未定义
更新
我做了一项研究,我发现自己最好的选择是创建一个新事件并触发它。
$("#something").on("mousedown", function(e){
var somethingClickedEvent = $.Event('somethingClicked', $.extend(e, { type: 'somethingClicked'}));
app.trigger(somethingClickedEvent, [{data: somedata}])
})
答案 0 :(得分:1)
1)您可以简单地将which
- 属性作为第二个参数传递给.trigger()
(无需将其包装在对象或数组中)并在somethingClicked
中接收它 - 回调作为第二个参数:
$("#something").on("mousedown", function (e) {
app.trigger("somethingClicked", e.which);
})
$("#app").on("somethingClicked", function (e, w) {
if (w == 3) console.log("right");
else if (w == 1) console.log("left");
else console.log("center");
});
在某处我已经读过event.which
将被弃用。您可以通过这种方式在mousedown函数中获取鼠标按钮(这里的数字不同!):
var button = e.originalEvent.button; // 0 is left, 1 is center, 2 is right
2)另一种方法是重用mousedown-event对象(可能使用jQuery-但不能使用本机js-events):
$("#something").on("mousedown", function (e) {
e.type = "somethingClicked"; // change event type
app.trigger(e);
})
$("#app").on("somethingClicked", function (e) {
// here is the complete mousedown-event object available,
// only the type has changed to "somethingClicked"
if (e.which == 3) console.log("right");
else if (e.which == 1) console.log("left");
else console.log("center");
});
答案 1 :(得分:0)
您触发的事件默认情况下会发送参数e
作为触发的事件。因此,您需要设置一些其他参数,这些参数也可以包括原始事件。无需为其他参数命名。你可以这样做:
var app = $("#app");
$("#something").on("mousedown", function (e) {
app.trigger("somethingClicked", [e, "some data"]);
})
app.on("somethingClicked", function (e, event, data) {
console.log(data);
if (event.which == 3) {
console.log("right");
} else {
console.log("left");
}
});
有关工作示例,请参阅此FIDDLE。