簡體   English   中英

禁用鼠標中鍵進行模態對話框

[英]Disable middle mouse button for modal dialog

我有這樣一個問題:我有一個鏈接,單擊該鏈接可在當前頁面頂部的模式對話框中打開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>

UPD我用了你的建議

if(e.which == 2) {
   e.preventDefault();
}

它可能會阻止Default,但仍會使用該表單打開新標簽頁。 當我用鏈接上的中間/鼠標按鈕單擊時,它甚至沒有顯示我,他輸入了此$(function(){$('a.ajaxFormDialog')。on(“ click”,function(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)中,非常接近的解決方案是:

if (event.preventDefault)
    event.preventDefault();
else
    event.returnValue= false;
return false;

由於Firefox(可能還包括Opera)已經將中點點擊行為從開發人員手中奪走了,我建議用其他節點替換錨節點,例如<span>

從語義<a>這還可以,因為<a>標記在您的使用場景中不再充當實際的鏈接。 它可以使用CSS保持外觀。

可以在此jsfiddle中找到一個實時示例。

對於這種標記:

<a class="ajaxFormDialog" href="#">replaced link</a>

您可以使用CSS,例如:

a, .ajaxFormDialog {
    color: orange;
    text-decoration: underline;
    cursor: hand;
}

a:hover, .ajaxFormDialog:hover {
    background: orange;
    color: white;

}

並用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);
});

如果您希望暫時避免點擊中毒的副作用,那么這似乎是種種弊病。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM