按下不捕捉输入密钥

时间:2019-05-02 14:06:01

标签: jquery dotnetnuke keydown

我正在使用以下jquery来捕获按下的回车键,因此我可以单击链接(这是DNN bug的一种解决方法):

Result

但是,它不起作用。我将警报放到了keydown功能中进行测试,它会正确显示我击中的每个键的按键,除了我真正想要的键(回车键)。

简单的JSFiddle不能重现该问题。为什么这对我不起作用?回车键是否被其他东西劫持了?

1 个答案:

答案 0 :(得分:1)

其他代码首先捕获了Enter键

我最终实现了在其他地方找到的不同解决方案。由于这是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>