触发时如何获取原始事件

时间:2014-10-30 11:15:36

标签: jquery events

触发它时是否可以获取原始事件对象。

在我的应用程序中,由于某些原因,我需要触发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}])
})

2 个答案:

答案 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