Javascript 禁用模式对话框的鼠标中键

Javascript 禁用模式对话框的鼠标中键,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有这样一个问题: 我有一个链接,单击该链接可在当前页面顶部的模式对话框中打开ajaxFormDialog。但当我点击中间按钮时,它会在新选项卡中打开,所有内容都不在模式窗口中,但当前在新选项卡页面上,看起来很糟糕。所以,我的问题是,如何才能禁用鼠标中键单击当前链接 <a class="ajaxFormDialog" ...></a> <script> $(function (){ $('a.ajaxFormDialog').live("

我有这样一个问题: 我有一个链接,单击该链接可在当前页面顶部的模式对话框中打开ajaxFormDialog。但当我点击中间按钮时,它会在新选项卡中打开,所有内容都不在模式窗口中,但当前在新选项卡页面上,看起来很糟糕。所以,我的问题是,如何才能禁用鼠标中键单击当前链接

<a class="ajaxFormDialog" ...></a>
<script>
    $(function (){
       $('a.ajaxFormDialog').live("click", function(e) {
           $.ajax({
                type: "POST",
                url: $("#formContent form").attr("action"),
                data: $("#formContent form").serialize(),
                success: function(data) {
                            //... do something
                         }
                 });
       });
</script>
它可能会防止出现错误,但仍然会使用该表单打开新选项卡。 当我用鼠标中键点击链接时,它甚至没有告诉我,他输入了$(函数(){$('a.ajaxFormDialog')。在(“点击”,函数(e){

UPD2我写了这样的代码:

$(function (){
   $('a.ajaxFormDialog').live("click", function(e) {
       console.log("Which button is clicked: " + e.which);
       if(e.which == 2) {
          e.preventDefault();
       }
       // rest of the code...
所以当我点击鼠标左键时,控制台会显示“点击哪个按钮:1”,
但当我单击鼠标中键/鼠标滚轮按钮时,它不会显示任何内容,并且仍然会在新选项卡中打开。

已更新

$("a.ajaxFormDialog").on('click', function(e) { 
   if( e.which == 2 ) {
      e.preventDefault();
   }
});
如前所述,在firefox中不能禁用鼠标中键的默认功能

Firefox和其他Gecko浏览器已经释放了对鼠标右键的控制,但不能禁用鼠标中键的默认操作。您可以通过编辑“about:config”URL上的鼠标中键设置来更改默认操作,但Javascript无法取消这些设置

你可以在你的帖子中找到类似的链接

在某些现代浏览器(如Chrome)中,非常接近实际的解决方案是:


已更新

如前所述,在firefox中不能禁用鼠标中键的默认功能

Firefox和其他Gecko浏览器已经释放了对鼠标右键的控制,但不能禁用鼠标中键的默认操作。您可以通过编辑“about:config”URL上的鼠标中键设置来更改默认操作,但Javascript无法取消这些设置

你可以在你的帖子中找到类似的链接

在某些现代浏览器(如Chrome)中,非常接近实际的解决方案是:

由于Firefox(大概还有Opera)已经让开发人员摆脱了中键点击行为的控制,我建议用不同的节点替换锚节点,例如

这在语义上似乎没有问题,因为

对于此类标记:

<a class="ajaxFormDialog" href="#">replaced link</a>
并将锚点替换为
span
,包括存储任何所需属性和维护任何子节点(如果有)的功能。您可以稍后在事件处理程序中检索这些属性

示例代码如下所示:

var genericHandler = function(e) {
    var el = $(e.target);
    var href = el.data('href');
    //extract data
    console.log('clicked span: ',el, ' with stored href: ', href);
    //do stuff here
};

$('a.ajaxFormDialog').replaceWith(function(){
    var el = $(this);
    console.log('replacing element: ', el);
    return $("<span>").addClass('ajaxFormDialog').append($(this).contents()).
        data('href', el.attr('href')). //you can store other data as well
        click(genericHandler);
});
var genericHandler=函数(e){
var el=$(e.target);
var href=el.data('href');
//提取数据
log('单击span:',el',并存储href:',href);
//在这里做事
};
$('a.ajaxFormDialog').replaceWith(函数(){
var el=$(本);
console.log('替换元素:',el);
返回$(“”).addClass('ajaxFormDialog').append($(this.contents())。
data('href',el.attr('href')。//您还可以存储其他数据
单击(genericHandler);
});
如果您希望暂时避免中键点击的副作用,这似乎是所有弊病中较小的一个。

由于Firefox(大概还有Opera)已经将中键点击行为从开发人员手中夺走,我建议将锚节点替换为不同的节点,例如

这在语义上似乎没有问题,因为

对于此类标记:

<a class="ajaxFormDialog" href="#">replaced link</a>
并将锚点替换为
span
,包括存储任何所需属性和维护任何子节点(如果有)的功能。您可以稍后在事件处理程序中检索这些属性

示例代码如下所示:

var genericHandler = function(e) {
    var el = $(e.target);
    var href = el.data('href');
    //extract data
    console.log('clicked span: ',el, ' with stored href: ', href);
    //do stuff here
};

$('a.ajaxFormDialog').replaceWith(function(){
    var el = $(this);
    console.log('replacing element: ', el);
    return $("<span>").addClass('ajaxFormDialog').append($(this).contents()).
        data('href', el.attr('href')). //you can store other data as well
        click(genericHandler);
});
var genericHandler=函数(e){
var el=$(e.target);
var href=el.data('href');
//提取数据
log('单击span:',el',并存储href:',href);
//在这里做事
};
$('a.ajaxFormDialog').replaceWith(函数(){
var el=$(本);
console.log('替换元素:',el);
返回$(“”).addClass('ajaxFormDialog').append($(this.contents())。
data('href',el.attr('href')。//您还可以存储其他数据
单击(genericHandler);
});


如果您希望暂时避免鼠标中键的副作用,这似乎是所有弊病中较小的。

鼠标中键是什么意思?@Sora单击滚轮…如果(e.which==2){//鼠标中键代码e.preventDefault();警报(“鼠标中键”);}不知何故,
不起作用,仍然会在新选项卡中打开。我使用FireFox。我不确定这是否可以避免。如何通过编程将其替换为伪链接(看起来像链接,但不是真正的链接,像
,具有相同内容和应用相同CSS的链接),没有相同的副作用?鼠标中键是什么意思?@Sora单击滚轮…如果(e.which==2){//鼠标中键代码e.preventDefault();警报(“鼠标中键”);}不知何故,
不起作用,仍然会在新选项卡中打开。我使用FireFox。我不确定这是否可以避免。如何通过编程将其替换为伪链接(看起来像链接,但不是真正的链接,像
,具有相同内容和应用相同CSS的链接),没有相同的副作用?抱歉,伙计,我将“live”更改为“on”,并添加了如果使用preventDefault,它仍然会在新选项卡中打开。@Gytis这种方法的问题是ajax功能仍然会出现。请检查下面的解决方案。抱歉,伙计,我将“live”更改为“on”,并添加了如果使用preventDefault,它仍然会打开在新选项卡中。@gyt这种方法的问题是ajax功能仍然会出现。请检查下面的解决方案。仍然在新选项卡中打开,我将再次更新我的帖子(UPD2)以显示更多内容detail@Gytis当你按下鼠标中键时,它会在新标签页中打开?@格林先生,类似的方法在Chrome中也适用,但在Firefox中却不适用。