2

背景

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

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

问题

根据W3C DOM 鼠标事件规范,我似乎有一种可行的方法来使用 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 不是。我应该只让用户以有意义的方式与应用程序交互。任意编辑地址栏不是其中之一。

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

4

1 回答 1

6

简短的回答?做不到。

长答案? Javascript 鼠标事件。还是做不到。

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

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

或者是审美的原因(即更短、“更好”的 URL)?

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

于 2008-12-30T22:02:03.017 回答