Вызвать щелчок правой кнопкой мыши

#javascript #jquery #contextmenu

#javascript #jquery #контекстное меню

Вопрос:

Я пытаюсь позже привязать контекстные меню к элементам, используя плагин ContextMenu. Итак, при первом щелчке правой кнопкой мыши по этим элементам я хотел бы :

  1. перехватывать щелчок правой кнопкой мыши через текущее событие в определенном классе «uncontextmenued»,
  2. определите, существует ли data('events').contextmenu ,
  3. если нет, присоедините контекстное меню (и измените класс, чтобы избежать повторного запуска этого текущего процесса),
  4. повторно запустите событие щелчка правой кнопкой мыши, чтобы отобразить щелчок правой кнопкой мыши.

У меня возникли проблемы с последним элементом. jQuery позволяет использовать .click() или to .trigger('click') , которые имитируют щелчок левой кнопкой мыши, но, похоже, не существует способа запустить событие щелчка правой кнопкой мыши через trigger .

Или есть?

Ответ №1:

Вы можете запустить его с помощью

 $('#element').trigger({
    type: 'mousedown',
    which: 3
});
  

http://api.jquery.com/trigger/#example-5

Комментарии:

1. Хорошо, это навело меня на правильный путь. Просто для завершения ответа, указанный плагин на самом деле нуждается в наведении курсора мыши, за которым следует наведение курсора мыши… Итак, за запуском, как сказал Никлас, должен следовать триггер (‘mouseup’). Поскольку плагин считывает свойство ‘button’, а не ‘which’, фактическим ответом на мою проблему был $ (‘#element’).trigger(‘mousedown’,{кнопка: 2}).trigger(‘mouseup’) . Спасибо, Никлас.

2. Привет, субтенант, миллион благодарностей, мне нужна была точно такая же функциональность, и ваш ответ действительно мне очень помог, но я думаю, что у вас там ошибка, мне пришлось изменить его на: $ (‘#element’).trigger({type:’mousedown’, button: 2}).trigger({type:’mouseup’}); чтобы заставить его работать.

3. То же самое в моем случае, «наведение курсора мыши» вместо «наведение курсора мыши».

4. У меня это не работает. Я также попробовал решение, предоставленное Беном Лешем, но безуспешно. ?

Ответ №2:

Есть более новый способ сделать это:

 $('#element').triggerHandler('contextmenu');
  

Документацию можно найти здесь.

Комментарии:

1. Для меня 'contextMenu' не сработало. Вместо этого 'contextmenu' сработало должным образом.

Ответ №3:

Похоже на это, но я не уверен, имеете ли вы в виду данные пользовательского интерфейса jQuery, но.

 $('#element').mousedown(function(event) 
{
    if(event.which == 3)
    {
        if(typeof($(this).data('events')) === 'undefined')
        {
            $(this).data('events', { somedata: 'hello' });
        }
        else
        {
            // "re-throw" right click context menu
        }
    }
});
  

Комментарии:

1. Извините, но я хочу вызвать событие щелчка правой кнопкой мыши, а не присоединять к нему событие.