Проблема с onClick() и средней кнопкой мыши

<a href="<?=$rowz[0]?>" onClick="countLinks('<?=$row[6]?>','<?=$indexl?>')">[Link <?=$j++?>]</a>

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

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

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


person markzzz    schedule 17.07.2010    source источник
comment
возможный дубликат Запуск события onclick с помощью среднего щелчка   -  person rds    schedule 18.09.2013


Ответы (3)


Ты прав. Вам нужно событие 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 будет содержать число, указывающее, какая кнопка мыши была нажата.

person jAndy    schedule 17.07.2010
comment
+1 а почему бы и нет click? Вы также можете увидеть, была ли нажата кнопка левой, средней или правой... Mouseup mousedown может вести себя по-разному в разных браузерах. - person Sinan; 18.07.2010
comment
@Sinan Y.: это событие click javascript объединяет mousedown + mouseup и срабатывает только при нажатии левой кнопки. - person jAndy; 18.07.2010
comment
хм... так мне нужно поставить для каждого случая (1-2-3) копию одной и той же функции? и как я могу передать параметры (например, $row[6] и $indexl) этой функции? - person markzzz; 18.07.2010
comment
я знаю, что щелчок - это комбинация обоих, в любом случае, плохо, я вспомнил, что он вел себя странно, возможно, я перепутал что-то еще, но я проверил сейчас, и вы определенно правы, извините за загрязнение текста :) - person Sinan; 18.07.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 :)

person Sinan    schedule 17.07.2010
comment
uoo ... никогда раньше не видел такого синтаксиса в ссылке (я имею в виду data-var stat). мне нужно научиться этому :) завтра я проверю эту функцию, сейчас в Италии (3:00 утра) немного поздно! танкс мужчина - person markzzz; 18.07.2010
comment
К вашему сведению: $(this).data('row') совпадает с $(this).attr('data-row') - person WildlyInaccurate; 06.03.2013

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

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

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

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

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

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

person Matthew Flaschen    schedule 19.09.2014