jQuery中存在一个问题,当使用accesskey时,会导致通过文档绑定的事件处理程序无法触发。
问题的代码示例:
<html>
<head>
<title></title>
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
<script>
$(document).ready(function () {
$(document).on("click", "#btnOK", save1);
$("#btnOK").on("click", save2);
document.getElementById("btnOK").addEventListener("click", save3);
$(document).on("click", save4);
});
$(document).on('submit', function () {alert("Submitting the page"); });
function save1() {
alert('1');
//return false;
}
function save2() {
alert('2');
// return false;
}
function save3() {
alert('3');
//return false;
}
function save4(e) {
console.log(this, e)
if (e.target.id === "btnOK")
alert(4);
//return false;
}
</script>
</head>
<body>
<form>
<button id="btnOK" name="btnOK" accesskey="S" ><u>S</u>ave</button>
</form>
</body>
正如您所设想的,当我们在IE11中单击一个按钮(使用鼠标按钮)时,我们得到消息序列:“2”,“3”,“1”,“4”,“提交页面”。然后,如果我们使用accesskeys“单击”按钮,页面显示相同的行为将是合理的。 但你错了。
我们得到的只是“2”,“3”,“4”,“提交页面”。
尽管事实上,“click”事件完全相同(除了按钮和按钮属性,但这没关系),我们用
$(document).on("click", save4);
但不是
$(document).on("click", "#btnOK", save1);
有人知道,如何解决?不使用IE11 不是选项。