2013-06-21 6 views
2

У меня есть такая проблема: У меня есть ссылка, которая при нажатии открывается 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(); 
} 

это возможно preventsDefault, но по-прежнему открывает новую вкладку с этой формой. Когда я нажимаю кнопку со средней/колесиковой мышью по ссылке, она даже не показывает мне, что он ввел этот $ (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», , но когда я нажимаю кнопку средней/колеса прокрутки он ничего не показывает и все еще открывается на новой вкладке.

+0

Что вы подразумеваете под средней кнопкой мыши? – Sora

+0

@Sora Щелчок по колесу прокрутки ... –

+0

if (e.which == 2) {// код средней кнопки мыши e.preventDefault(); предупреждение («средняя кнопка»); } – Sora

ответ

1

С Firefox (и, по-видимому, Opera, а) принял средней кнопку мыши поведения из рук разработчиков, Я бы предложил заменить якорный узел (узлы) другим узлом, например <span>.

Это похоже семантически O.K, поскольку тег <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); 
}); 

Это, кажется, меньшее из всех зол, если вы хотите, чтобы избежать средней кнопки мыши побочные эффекты, на данный момент.

2
$("a.ajaxFormDialog").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
    } 
}); 
+1

'if (e.which! = 2) // сделаем следующее' также будет работать. –

+0

@Mr_Green Всегда лучше отказаться, чем принимать;) –

+0

Извините, приятель, я изменил 'live' на 'on' и добавил, что если with preventDefault - он по-прежнему открывается на новой вкладке. – Gytis

1

ОБНОВЛЕНО:

Функция по умолчанию средней кнопки мыши не может быть отключена в firefox. Как указано here.

Firefox и другие браузеры Gecko выпустили управление правой кнопкой мыши, но действие по умолчанию среднего щелчка не может быть отключено. Вы можете изменить действие по умолчанию, отредактировав параметры midmouse на URL «about: config», но Javascript не может их отменить.

Вы найдете похожие ссылки на ваше сообщение here.

очень тесное рабочее решение в каком-то современном браузере (например, Chrome) является:

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

Все еще открывается в новой вкладке, я еще раз обновляю свой пост (UPD2), чтобы показать подробнее – Gytis

+0

@ Gytis открывается в новой вкладке, когда вы нажимаете среднюю кнопку мыши вправо? –

+0

Да, он открывается в новой вкладке – Gytis

Смежные вопросы