当用户单击左键或中键时,我想显示一个jQuery-UI对话框作为弹出窗口。它适用于左键单击(我收到警报框,然后是弹出窗口),但对于中键则不起作用(既没有警报框也没有弹出窗口)。我错过了什么?
$('a.external').live('click', function(e){
if( e.which <= 2 ) {
e.preventDefault();
alert ("inside if");
}
popUp.start(this);
});
当用户单击左键或中键时,我想显示一个jQuery-UI对话框作为弹出窗口。它适用于左键单击(我收到警报框,然后是弹出窗口),但对于中键则不起作用(既没有警报框也没有弹出窗口)。我错过了什么?
$('a.external').live('click', function(e){
if( e.which <= 2 ) {
e.preventDefault();
alert ("inside if");
}
popUp.start(this);
});
使用 mousedown
或 mouseup
代替 click
。并且(除非你正在使用一个非常旧的版本的 jQuery)使用 .on()
而不是 .live()
:
$(document).on("mousedown", "a.external", function(e) {
if( e.which <= 2 ) {
e.preventDefault();
alert ("inside if");
}
popUp.start(this);
});
最好使用一个比 document
更接近链接的父元素。
"a.external"
作为数据传递给事件处理程序?他不是把它用作选择器吗? - Nate.on()
文档。在这种情况下,mousedown事件绑定到文档,但当它发生时,jQuery会自动检查源元素是否与第二个参数中的选择器匹配(只有在匹配时才调用您的函数)。理想情况下,您不应该绑定到文档:正如我在答案中提到的,最好使用更接近链接的父级元素。 - nnnnnn.on('mouseup', fn)
。$(selector).on('mouseup', function (e) {
switch (e.which)
{
// Left Click.
case 1:
// By way of example, I've added Ctrl+Click Modifiers.
if (e.ctrlKey) {
// Ctrl+LeftClick behaviour.
} else {
// Standard LeftClick behaviour.
}
break;
// Middle click.
case 2:
// Interrupts "Firefox Open New Tab" behaviour.
break;
// Default behaviour for right click.
case 3:
return;
}
// Pass control back to default handler.
return true;
});