Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个enterkeypress运行JavaScript keypress事件处理程序代码两次_Javascript - Fatal编程技术网

一个enterkeypress运行JavaScript keypress事件处理程序代码两次

一个enterkeypress运行JavaScript keypress事件处理程序代码两次,javascript,Javascript,为什么输入keypress会在该代码中运行两次? 我尝试了keypress,keydown以及event.preventdefault(),但都没有成功 $(document).keydown(function (e) { if (e.which == 13) { alert("0") var focado = document.getElementById(document.activeElement.id), fim = focado.id.substr

为什么输入
keypress
会在该代码中运行两次? 我尝试了
keypress
keydown
以及
event.preventdefault()
,但都没有成功

$(document).keydown(function (e) {
    if (e.which == 13) {
       alert("0")
        var focado = document.getElementById(document.activeElement.id), fim = focado.id.substring(1),
            inicio = focado.id.substring(0, 1),
            fimseg = fim,
            anterior = inicio + (fim - 1),

        alert("1")


        alert("focado " + focado.id + " fim " + fim + " inicio " + inicio + " fimseg " + fimseg + " anterior " + anterior);
    }
});
只有在给出这3条消息两次之后,它才会继续执行剩余的代码(未显示)

更新:

这是完整的程序:

$(document).keydown(function (e) {
    if (e.which == 13) {

        var focado = document.getElementById(document.activeElement.id), fim = focado.id.substring(1),
            inicio = focado.id.substring(0, 1),
            fimseg = fim,
            anterior = inicio + (fim - 1),
            seguinte = focado;


        switch (fim) {
            case "1":
                fimseg = "2"
                break;
            case "2":
                fimseg = "3"
                break;
            case "3":
                fimseg = "4"
                break;
            case "4":
                fimseg = "5"
                break;
        }
      seguinte = inicio + (fimseg);

        if (seguinte == "p5") {
            seguinte = "a1";
        }

        alert("focado " + focado.id + " fim " + fim + " inicio " + inicio + " fimseg " + fimseg + " anterior " + anterior + " seguinte " + seguinte);

        if (focado.value.length == 0) {//enter no vazio

           alert("aqui")
            if (fim != 1) {//se não é p1 nem a1
                alert("1")
                if (document.getElementById(anterior).value.length == 0) {//se anterior vazio
                    alert("2")
                    document.getElementById(anterior).focus()
                } else {//se anterior não vazio
                    alert("3")
                    if (seguinte == "a5") {//se é a4
                        alert("4")
                        document.getElementById("btnSubmit").click();
                    } else {//se nºao é a4
                        alert("5")
                        document.getElementById(seguinte).focus()
                    }
                }

            } else {//é p1 ou a1

                document.getElementById(focado.id).focus()  //foca no próprio

            }
        } else {
                            if (focado.value.length < 7 || (isNaN(focado.value))) {

                document.getElementById(focado.id).innerHtml = "";
                if (anterior.value.length == 0) {

                    document.getElementById(anterior).focus()
                } else {

                    document.getElementById(focado.id).focus()
                }
            } else {

                if (fim != 1) { //não é p1 nem a1


                    if (document.getElementById(anterior).value.length ==0) {

                        document.getElementById(anterior).focus()
                    } else {

                        if (seguinte == "a5") {

                            document.getElementById("btnSubmit").click();
                        } else {

                            document.getElementById(seguinte).focus()

                        }
                    }
                } else {

                    document.getElementById(seguinte).focus()

                }
            }
        }
    } //não é enter
}); //fim função

它返回到第一个变量声明。这是一个问题,因为这样变量
fimseg
seguinte
以错误的值开始该循环

您似乎有语法错误。即使我包括
})
您的问题中没有正确地包装代码,我在Firebug控制台中仍然遇到此错误:

SyntaxError: missing ;
before statement alert("1") <----
语法错误:缺少;

在语句警报(“1”)之前,此行为是否持续,您是否将
alert()
替换为
console.log()
?示例代码有语法错误。请提供完整的代码,以便任何人都可以重现您的实际错误。它不会触发多次。请参见此处:。但是您到处都缺少分号(在演示中也已修复),我添加了完整代码的更新。修剪后的代码中缺少分号@Halcyon:警报只是我的调试助手,切换块只是因为我无法执行此操作:seguinte=inicio+(fim+1);使用sum而不是concatenate(fim+1),我尝试了seguinte=inicio+(parse(fim)+1);和seguinte=inicio+(parseInt(fim)+1);但是他们抛出了错误,如果我可以使这个和工作,我可以避免开关块和函数可能会工作。。。那个开关块只是因为我不能这样做:seguinte=inicio+(fim+1);使用sum而不是concatenate(fim+1),我尝试了seguinte=inicio+(parse(fim)+1);和seguinte=inicio+(parseInt(fim)+1);但是如果我能使这个和起作用,我就能避免开关块,这个函数很可能会起作用,他们就会抛出错误。@mehrlicht检查一下这个不容置疑的基于您的原始样本创建的小提琴:。一旦添加分号,它就可以正常工作。至于你的新代码,它应该做什么?代码与以前完全不同。你预计会发生什么?请注意,您必须按Ctrl+Enter来运行小提琴,然后在右下角的结果窗口中单击以使用它。当它计算出(focado.value.length==0)是否再次开始表示焦点在下一个输入字段中时。@mehrlicht再次问:您希望发生什么?用文字描述您希望代码执行的操作。(写这些词可能需要很多分钟,甚至一个多小时才能得到正确的解释。没关系!需求比代码更重要!)然后描述发生了什么。(记住要包括你是如何得到这种不良行为的——你还在按Enter键吗?当你按Enter键时哪个控件有焦点?)。我们不能在不知道程序外壳应该做什么的情况下调试它。
SyntaxError: missing ;
before statement alert("1") <----