2017-03-07 176 views
2

这是我的代码捕获“在新标签中打开链接”和“在新窗口中打开链接”事件

<a href="javascript:void(0)" onclick="myFun('www.google.com');" onmousedown="myFun('www.google.com');"> 

每当我点击这个链接我的函数被使用onclick事件呼吁。我添加了onmousedown事件右键捕获。但问题是,在选择“在新标签中打开”“在新窗口中打开”选项之前调用此功能。当用户使用右键单击并在选择正确的单击选项之前,函数被调用。我不想要这种行为。当用户实际选择“在新标签中打开链接”“在新窗口中打开链接”选项时,我想调用此功能。

我不想在状态栏中显示链接,也不想让用户复制链接地址。这就是为什么我使用onclick和onmousedown事件。

请帮我一把。由于

+0

这些是浏览器事件,而不是网页事件 – Cruiser

+0

有没有什么告诉你用户选择这些。 – epascarello

+0

我不能只使用oncontextmenu事件。如果我这样做,它会给我一个例外 - JSPG0227E:翻译/abc.jsp时捕获的异常:/abc.jsp(160,10) - > JSPG0123E:无法找到tag属性的标签属性信息oncontextmenu – Nitesh

回答

0

这听起来像你正在寻找这样的事情,一旦上下文菜单中启动,这将改变链接:

function myFun2(url) { 
    linkEl.href = url; 
} 

然后分配a元素的ID(即“LINKEL”),除去onmousedown处理程序,并指定一个oncontextmenu处理程序,如:当上下文菜单启动

oncontextmenu="myFun2('www.google.com');" 

然后,链接会发生变化,因此,如果“打开在新标签”或“在新窗口打开”选择,它会去Google (在这个例子中),而不是之前设置的链接。

+0

: - In我的例子我想发送要打开的链接。我正在做的是,我想将该链接传递给一个JS函数,并希望使用JS创建一个表单。然后使用form.submit()提交表单; 我的网址包含一些我不想在地址栏中显示的参数。我正在创建表单并将其提交给POST请求。 – Nitesh

0

您遇到的问题是左右两边都是用onclick函数处理的。另一种可能性是使用oncontextmenu(如提到here)。

但我认为你需要处理右键单击和左键单击不同,所以onclick是正确的事件,只需检查它是主(0)还是次(2)mouseButton(请参阅here)。所以你的解决方案可能是这样的:

myFun(link) { 
    var buttonPressed = instanceOfMouseEvent.button; 
    if (buttonPressed == 0) { 
     //Handle normal click 
    } else if (buttonPressed == 2) { 
     //Handle right click 
    } 
} 
+0

我可以找出正确的点击事件。但是,当用户实际选择“在新标签中打开”或“在新窗口中打开”选项时,我想查找该事件。在选择这些选项之前,我的功能被触发。因为我是我的代码能够找到右键单击事件。我不想要它。在选择选项 – Nitesh

+1

@NiteshAarne后,我们的功能应该会触发,您可能想查看[构建您自己的上下文菜单](https://www.sitepoint.com/building-custom-right-click-context-menu-javascript/) 。这样你可以更好地控制发生的事情。 – freginold

+0

在我的示例中,我想发送要打开的链接。我正在做的是,我想将该链接传递给一个JS函数,并希望使用JS创建一个表单。然后使用form.submit()提交表单;我的网址包含一些我不想在地址栏中显示的参数。我正在创建表单并将其提交给POST请求。 – Nitesh