使用JQuery捕获DOM中的鼠标点击?

时间:2008-12-30 21:53:17

标签: javascript jquery dom mouse

背景

我正在使用POST表单提交而不是Web应用程序中带有连接参数的链接,因此我可以对输入进行控制。

不幸的是,这意味着用户无法使用他们所知道的快捷方式在新窗口中打开链接,例如按住控件或单击鼠标中键。

问题

基于W3C DOM mouse events specification,我已经得到了使用jQuery捕获鼠标输入和各种和弦键的可行方法:

 $("span#clickspan").click( function(event) {

   buttonpress = event.button;
   ctrlpress = event.ctrlKey;

    $("#clickresult").empty();
    $("#clickresult").append("<p>Click!</p>");
    $("#clickresult").append("<p>Button # " + buttonpress + " pressed!</p>");
    if (ctrlpress) {
        $("#clickresult").append("<p>Control-click!</p>");
    }

    //form submission code would go here

    event.preventDefault();

    }
 );

我可以通过这种方式捕获控件 - 点击(在Firefox 3和IE7中测试),并且它正确地(?)报告左键单击来自鼠标按钮#0,但由于某种原因,此代码仍未捕获中间单击跨度,右键单击仍会弹出上下文菜单。我想至少捕获中间点击次数。

有人可以帮忙吗?

“控制”意味着什么

带有连接参数的GET提交/链接的问题是任何人都可以编辑地址栏并键入任何内容。我已经担心服务器端的身份验证和验证。这不是我想使用POST的原因。

我应该只向用户显示有意义的信息。内部数据库ID不是。我应该只是让用户以有意义的方式与应用程序交互。任意编辑地址栏不是其中之一。

人们总是打错字。但是,从系统的角度来看,地址栏中的拼写错误与应用程序逻辑中的缺陷之间没有区别,而且我宁愿不去决定将哪一个刚刚发生在用户身上。

1 个答案:

答案 0 :(得分:6)

简短回答?做不到。

答案很长? Javascript mouse events。仍然做不到。

这引出了一个问题:你需要使用POST还是只是想要?您需要的唯一原因是查询字符串长度。至于想要,你提到“控制用户输入”。这究竟意味着什么?

您永远不应该依赖浏览器进行输入验证。您可以在那里方便地执行此操作,但服务器应始终验证输入。

或美观的原因(即更短,“更好”的网址)?

你正在重新发明超链接的轮子。我只是想确保你有一个非常好的理由这样做,因为它适得其反,你永远不会得到与实际超链接相同的浏览器支持和兼容性。此外,您可能只是通过让他们期望无法正常工作的东西来惹恼您的用户。不好。