我试图让我在 ASP.Net 中的 gridview 控件根据用户在尝试通过单击列名进行排序时是否按下 Ctrl 键来进行多重排序。问题是,当我使用 Firefox 时,如果我在按下 Ctrl 键的情况下单击列名,浏览器会尝试在新选项卡中打开“javascript:__doPostBack('ctl00$ContentPla...”链接。IE 和 Chrome 都有除非链接是真正的链接,否则不要这样做。
有没有办法可以阻止 Firefox 在新标签页中打开链接并仍然导致页面正常回发?
谢谢。
您需要使用 document.onKeyDown 捕获按下 Ctrl 键的事件。
在您的事件处理程序中,检查是否按下了“Ctrl”(键码 17),如下所示:
function document_keyDown(e) {
var KeyID = (window.event) ? event.keyCode : e.keyCode;
if (KeyID == 17) {
ctrlDown = true;
}
}
在这里,我将“ctrlDown”变量设置为 true。
对于 onKeyUp 事件,您可以完全相反:
function document_keyUp(e) {
var KeyID = (window.event) ? event.keyCode : e.keyCode;
if (KeyID == 17) {
ctrlDown = false;
}
}
然后,在您的列元素的单击事件中,您可以检查 Ctrl 是否已被单击:
function columnElement_click() {
if (ctrlDown != undefined && ctrlDown == true)
alert("Ctrl + Click Received");
return false;
}
确保您的列单击处理程序返回 false。否则,浏览器将执行代码,然后导航到链接的“href”属性中的地址。
希望这可以帮助。
(另见:http ://www.geekpedia.com/tutorial138_Get-key-press-event-using-JavaScript.html )