keydown 没有捕捉到回车键
keydown not catching enter key
我正在使用以下 jquery 来捕获按下的回车键,以便我可以单击 link(这是 DNN bug 的解决方法):
var $container = $('div[id$="Login_DNN"]');
$container.keydown(function (event) {
alert('key press = ' + event.which); //<--- This pops up for all keys but enter
if(event.which===13){
//This only works for modern browsers
if (HTMLElement.prototype.click) {
$container.find('a[id$="cmdLogin"]')[0].click();
}
};
});
不过,它不起作用。我在 keydown 函数中放置了一个警报进行测试,它正确地显示了我按下的每个键的按键,除了我真正想要的那个,回车键。
简单的 JSFiddle 不会重现问题。为什么这对我不起作用?回车键是不是被别的东西劫持了?
其他代码先捕获回车键
我最终实施了在别处找到的不同解决方案。由于这是一个 DNN 错误,我进入 \DesktopModules\AuthenticationServices\DNN\Login.ascx
并将 <%#ModuleId%>
的所有实例替换为 <%=ModuleId%>
。然后我将按键检查移到它自己的函数中,以便可以在 $(document).ready()
和部分回发时调用它。这是完整的脚本:
<script type="text/javascript">
/*globals jQuery, window, Sys */
(function ($, Sys) {
function setUpLogin() {
var actionLinks = $("a#dnn_ctr<%=ModuleId > Null.NullInteger ? ModuleId.ToString() : ""%>_Login_Login_DNN_cmdLogin");
actionLinks.click(function () {
if ($(this).hasClass("dnnDisabledAction"))
{ return false; }
actionLinks.addClass("dnnDisabledAction");
});
}
function setUpKeydown() {
$('.dnnLoginService').on('keydown', function (e) {
if ($(e.target).is('input:text,input:password') && e.keyCode === 13) {
var $loginButton = $('#dnn_ctr<%=ModuleId > Null.NullInteger ? ModuleId.ToString() : ""%>_Login_Login_DNN_cmdLogin');
if ($loginButton.hasClass("dnnDisabledAction"))
{ return false; }
$loginButton.addClass("dnnDisabledAction");
eval($loginButton.attr('href'));
e.preventDefault();
return false;
}
});
}
$(document).ready(function () {
setUpKeydown();
setUpLogin();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
setUpKeydown(); setUpLogin();
});
});
}(jQuery, window.Sys));
</script>
我正在使用以下 jquery 来捕获按下的回车键,以便我可以单击 link(这是 DNN bug 的解决方法):
var $container = $('div[id$="Login_DNN"]');
$container.keydown(function (event) {
alert('key press = ' + event.which); //<--- This pops up for all keys but enter
if(event.which===13){
//This only works for modern browsers
if (HTMLElement.prototype.click) {
$container.find('a[id$="cmdLogin"]')[0].click();
}
};
});
不过,它不起作用。我在 keydown 函数中放置了一个警报进行测试,它正确地显示了我按下的每个键的按键,除了我真正想要的那个,回车键。
简单的 JSFiddle 不会重现问题。为什么这对我不起作用?回车键是不是被别的东西劫持了?
其他代码先捕获回车键
我最终实施了在别处找到的不同解决方案。由于这是一个 DNN 错误,我进入 \DesktopModules\AuthenticationServices\DNN\Login.ascx
并将 <%#ModuleId%>
的所有实例替换为 <%=ModuleId%>
。然后我将按键检查移到它自己的函数中,以便可以在 $(document).ready()
和部分回发时调用它。这是完整的脚本:
<script type="text/javascript">
/*globals jQuery, window, Sys */
(function ($, Sys) {
function setUpLogin() {
var actionLinks = $("a#dnn_ctr<%=ModuleId > Null.NullInteger ? ModuleId.ToString() : ""%>_Login_Login_DNN_cmdLogin");
actionLinks.click(function () {
if ($(this).hasClass("dnnDisabledAction"))
{ return false; }
actionLinks.addClass("dnnDisabledAction");
});
}
function setUpKeydown() {
$('.dnnLoginService').on('keydown', function (e) {
if ($(e.target).is('input:text,input:password') && e.keyCode === 13) {
var $loginButton = $('#dnn_ctr<%=ModuleId > Null.NullInteger ? ModuleId.ToString() : ""%>_Login_Login_DNN_cmdLogin');
if ($loginButton.hasClass("dnnDisabledAction"))
{ return false; }
$loginButton.addClass("dnnDisabledAction");
eval($loginButton.attr('href'));
e.preventDefault();
return false;
}
});
}
$(document).ready(function () {
setUpKeydown();
setUpLogin();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
setUpKeydown(); setUpLogin();
});
});
}(jQuery, window.Sys));
</script>