2011-06-06 130 views
13

我试图使用ContextMenu plugin将上下文菜单延迟绑定到元素。所以第一右键单击这些元素,我想:触发器右键单击

  1. 拦截通过对某个“uncontextmenued”一流的现场活动右击,
  2. 确定data('events').contextmenu存在
  3. 如果没有,附加上下文菜单(并更改班级以避免重新投入此实时进程),
  4. 重新抛出右键单击事件以显示右键单击。

我对最后一个项目有问题。 jQuery允许.click().trigger('click')模拟左键单击,但似乎没有办法通过trigger触发右键单击事件。

或者有吗?

回答

26

您可以通过

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

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

+2

好吧,让我走在正确的轨道上。只是为了完成答案,引用的插件实际上需要一个mousedown,然后是一个mouseup ...因此,触发像Niclas所说的必须跟着一个触发器('mouseup')。由于它是'button'属性,而不是插件读取的'which'属性,所以我的问题的实际答案是$('#element')。trigger('mousedown',{button:2})。触发('mouseup')。感谢Niclas。 – glmxndr 2011-06-06 12:42:07

+0

嗨subtenante,100万感谢,我只是在相同的功能后,你的回答真的帮了我很多,但我认为你有一个错误,我不得不改变它: $('#element')。trigger ({类型: '鼠标按下',按钮:2})触发({类型: '鼠标松开'}); ,使其工作。 – 2011-09-06 15:48:59

+0

与我的情况相同,“mouseup”而不是“mousedown”。 – gumkins 2013-07-25 04:48:22

-2

与此类似,但我不确定您是否可能指的是jQuery UI数据,但是。

$('#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 
     } 
    } 
}); 
+0

对不起,但我想触发一个右键单击事件,而不是附加一个事件。 – glmxndr 2011-06-06 10:46:11

4

还有就是做这个较新的方式触发它:

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

Documentation can be found here

+3

对我来说''contextMenu''不起作用。相反,''contextmenu''正常工作。 – lort 2014-02-11 14:56:52

+0

谢谢,这是一个错字。 – 2014-02-11 15:29:39