Проблема с onClick () и средней кнопкой мыши - PullRequest
5 голосов
/ 17 июля 2010
<a href="<?=$rowz[0]?>" onClick="countLinks('<?=$row[6]?>','<?=$indexl?>')">[Link <?=$j++?>]</a>

Проблема в том, что он не работает со средней кнопкой в ​​IE или Firefox.Фактически, countLinks с использованием средней кнопки вызывается только с хромом.

Я думаю, что мне нужна функция Jquery, такая как mouseup event, просто я не знаю, как вызывать эту функцию, которую она вызывает countLinks с этими параметрами параметров.

Любая помощь?

Ответы [ 3 ]

6 голосов
/ 18 июля 2010

Ты прав.Вам нужно событие mousedown или mouseup, чтобы определить, какая кнопка мыши была фактически нажата.

Но прежде всего вам нужно избавиться от этого встроенного обработчика событий onclick и следовать по блестящей дороге.из ненавязчивый javascript .

Для этого вам нужно присвоить этому якору тег id или class для его идентификации (Конечно, вы также можете выбрать этот якорь с помощью селектора css).Предположим, что мы добавили класс с именем myClazzz :)

javascript:

$(function(){
    $('.myClazzz').bind('mouseup', function(e){
        switch(e.which){
           case 1:
              alert('Left Mouse button pressed.');
           break;
           case 2:
              alert('Middle Mouse button pressed.');
           break;
           case 3:
              alert('Right Mouse button pressed.');
           break;
           default:
              alert('You have a strange Mouse!');
        }
    });
});

Свойство which в mousedown / mouseupОбработчик события будет содержать число, указывающее, какая кнопка мыши была нажата.

2 голосов
/ 18 июля 2010

Вот быстрое решение для вас, используя некоторые атрибуты html5 ... На самом деле это было возможно и до html5, но не проверялось.

Я бы создал ссылки, как показано ниже:

<a class="myClazzz" href="<?=$rowz[0]?>" data-row="<?=$row[6]?>" data-index="<?=$indexl?>">...</a>

_ здесь мы помещаем ваши параметры в data атрибуты

и напишите js следующим образом:

$(function(){
    //use mouseup, then it doesn't matter which button 
    //is clicked it will just fire the function
    $('.myClazzz').bind('mouseup', function(e){
        //get your params from data attributes
        var row   = $(this).attr("data-row"),
            index = $(this).attr("data-index");

        //and fire the function upon click
        countLinks(row,index);
    });
});
//don't forget to include jquery, before these lines;)

Надеюсь, это сработает. Синан.

PS myClazzz -> кредиты отправляются в jAndy:)

1 голос
/ 19 сентября 2014

Поведение этого браузера может изменяться.См. https://code.google.com/p/chromium/issues/detail?id=255#c106.В соответствии с этим, из тех, о которых вы спрашивали:

  • "IE не запускает событие щелчка, если целью является ссылка, но запускает его, если нажимается другой элемент, даже еслиэто потомок ссылки. "

  • " Gecko всегда запускает событие щелчка по документу, который всплывает и имеет в качестве цели элемент, по которому щелкают. "

Для Firefox, таким образом, вы можете сделать:

$( document ).click(
  function ( evt ) {
    // ... evt.which === 2 means middle click
  }
);

, что является своего рода трюком (обычно вы слушаете события на самой ссылке), но это работает.

...