Javascript 处理enter keypress事件时接收两个enter
我试图根据一些规则将光标跳转到代码条上,或者手动将代码输入到下一个字段(下一个字段不一定是下一个顺序…) 按enter键可触发该功能(代码条的末端也为我提供了所需的enter键) 麻烦的是,当只提交一个回车键(一个手动键或一个带有代码条的键)时,该函数的工作原理就好像它在执行过程中得到了第二个回车键一样。。。 它将重新评估哪个输入处于活动状态。 我甚至插入了一些警告信息,并注意到它确实运行了两次 无法理解,我使用不同的方法从头重写了代码,但结果是一样的。同样的错误 我也尝试过e.preventdefault(),但不是这样 以下是代码的两个版本:Javascript 处理enter keypress事件时接收两个enter,javascript,html,Javascript,Html,我试图根据一些规则将光标跳转到代码条上,或者手动将代码输入到下一个字段(下一个字段不一定是下一个顺序…) 按enter键可触发该功能(代码条的末端也为我提供了所需的enter键) 麻烦的是,当只提交一个回车键(一个手动键或一个带有代码条的键)时,该函数的工作原理就好像它在执行过程中得到了第二个回车键一样。。。 它将重新评估哪个输入处于活动状态。 我甚至插入了一些警告信息,并注意到它确实运行了两次 无法理解,我使用不同的方法从头重写了代码,但结果是一样的。同样的错误 我也尝试过e.preventd
$(document).keypress(function (e) {
if (e.which == 13) {
var focado = document.getElementById(document.activeElement.id);
var fim = focado.id.substring(1);
var inicio = focado.id.substring(0, 1);
var anterior = inicio + (fim - 1);
switch (fim) {
case "1":
fimseg = "2"
case "2":
fimseg = "3"
case "3":
fimseg = "4"
case "4":
fimseg = "5"
}
var seguinte = inicio + (fimseg);
if (seguinte == "p5") {
seguinte = "a1";
}
if (focado.value.length == 0) {
if (fim != 1) {
document.getElementById(focado.id).focus()
} else {
if (anterior.value.length == 0) {
document.getElementById(anterior).focus()
} else {
if (seguinte == "a5") {
document.getElementById("btnSubmit").click();
} else {
document.getElementById(seguinte).focus()
}
}
}
} 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).focus()
}
} else {
if (fim != 1) { //não é p1 nem a1
if (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
可能是用不同的键码或不同的事件处理程序捕获enter?
谢谢
更新:
输入框是:“p1”、“p2”、“p3”、“p4”、“a1”、“a2”、“a3”、“a4”,还有一个“btnSubmit”按钮您可能会发现使用
键下键将更有效。它的设计只能发射一次<代码>按键可重复
另外,从您的问题中不确定,但是如果您有$(document).keypress
在两个不同的位置,它应该同时运行这两个按钮。你确定它们没有相互干扰吗?我的代码有一些错误
通过这种方式工作:
$(document).keypress(function (e) {
if (e.which == 13) {
var focado = document.getElementById(document.activeElement.id);
var fim = focado.id.substring(1);
var inicio = focado.id.substring(0, 1);
var fimseg = fim;
var anterior = inicio + (fim - 1);
switch (fim) {
case "1":
fimseg = "2"
break;
case "2":
fimseg = "3"
break;
case "3":
fimseg = "4"
break;
case "4":
fimseg = "5"
break;
}
var seguinte = inicio + (fimseg);
if (seguinte == "p5") {
seguinte = "a1";
}
if (focado.value.length == 0) {
if (fim != 1) {
document.getElementById(focado.id).focus()
} else {
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 {
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
$(文档)。按键(功能(e){
如果(e.which==13){
var focado=document.getElementById(document.activeElement.id);
var fim=focado.id.substring(1);
var inicio=focado.id.substring(0,1);
var fimseg=职能指令手册;
var=inicio+(职能指令手册-1);
交换机(fim){
案例“1”:
fimseg=“2”
打破
案例“2”:
fimseg=“3”
打破
案例“3”:
fimseg=“4”
打破
案例“4”:
fimseg=“5”
打破
}
var seguinte=inicio+(fimseg);
if(seguinte==“p5”){
seguinte=“a1”;
}
如果(focado.value.length==0){
如果(职能指令手册!=1){
document.getElementById(focado.id).focus()
}否则{
if(document.getElementById(前面的).value.length==0){
document.getElementById(前面的).focus()
}否则{
如果(分段==“a5”){
document.getElementById(“btnSubmit”)。单击();
}否则{
document.getElementById(seguinte.focus())
}
}
}
}否则{
if(focado.value.length<7 | |(isNaN(focado.value))){
document.getElementById(focado.id).innerHtml=“”;
如果(前面的值。长度==0){
document.getElementById(前面的).focus()
}否则{
document.getElementById(focado.id).focus()
}
}否则{
如果(fim!=1){//nãoép1 nem a1
if(document.getElementById(前面的).value.length==0){
document.getElementById(前面的).focus()
}否则{
如果(分段==“a5”){
document.getElementById(“btnSubmit”)。单击();
}否则{
document.getElementById(seguinte.focus())
}
}
}否则{
document.getElementById(seguinte.focus())
}
}
}
}//nãoéenter
}); //芬索
按下键后,问题仍然存在。只有一个代码。我发布了两个版本,它们都有相同的错误。当p1激活时触发enter时,它应该将焦点跳转到p2。然后,如果在p2中触发第二个enter且p2为空,则焦点应跳至a1。发生的情况是,代码根据p1中激发的enter正确运行,并将焦点放在p2上,但立即将焦点重新放在a1上,就像第二个enter被激发一样。在第二个代码中,它对第一个if求值为true,长度>=7,并将焦点标识为p1,重新聚焦于p2,但也在else语句中进行(
$(document).keypress(function (e) {
if (e.which == 13) {
var focado = document.getElementById(document.activeElement.id);
var fim = focado.id.substring(1);
var inicio = focado.id.substring(0, 1);
var fimseg = fim;
var anterior = inicio + (fim - 1);
switch (fim) {
case "1":
fimseg = "2"
break;
case "2":
fimseg = "3"
break;
case "3":
fimseg = "4"
break;
case "4":
fimseg = "5"
break;
}
var seguinte = inicio + (fimseg);
if (seguinte == "p5") {
seguinte = "a1";
}
if (focado.value.length == 0) {
if (fim != 1) {
document.getElementById(focado.id).focus()
} else {
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 {
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