我有一个函数X,当光标集中在一个文本框中时,我按了回车键,但是有一种可能性(与其他JS函数一起),如果我集中在这个文本框上,我得到了一个警报。
问题就发生在这里,有时我通过按回车键来 "忽略 "这个错误。进入当警报出现时,如何不调用这个函数X,但我希望当警报再次关闭时,它能再次工作。
在HTML页面上。
<input type='text' name='col0' id='col0' onkeyup='arrowHandler(0);'
onblur='count(0)' />
<input type='text' name='col1' id='col1' onkeyup='arrowHandler(1);'
onblur='count(1)' />
<input type='text' name='col2' id='col2' onkeyup='arrowHandler(2);'
onblur='count(2)' />
<input type='text' name='col3' id='col3' onkeyup='arrowHandler(3);'
onblur='count(3)' />
在JS页面上:
function arrowHandler(i){
var key = window.event.keyCode;
if(key == 13){
// moving to the next (or first, if last) text field
var newcol = parseInt(i) + 1;
if(newcol == col) newcol = 0;
elmt = document.getElementById("col" + newcol);
elmt.focus();
}
}
function count(i){
if(parseInt(document.getElementById("col" + i).value) > 20){
alert("error!");
}
}
在这里,当焦点在 col0
,我写25,然后重点转移到。col1
我得到了一个警报,然后我按了回车键,结果,焦点移到了......。col2
(我不希望最后一个动作是因为在显示警报时按下回车键)。
你可以试试这样的方法。
var block = false;
function arrowHandler(evt, i){
var key = window.event.keyCode;
if(!block && key == 13){
// moving to the next (or first, if last) text field
var newcol = parseInt(i) + 1;
if(newcol == col) newcol = 0;
elmt = document.getElementById("col" + newcol);
elmt.focus();
}
}
function count(i){
if(parseInt(document.getElementById("col" + i)).value > 20){
block = true;
alert("error!");
setTimeout(function(){block=false;},100);
}
}
其中,如 alert
停止JS的执行,忽略警报后的任何按键。
虽然,你可能应该重新考虑使用 alert
,有更好的方法来进行验证。
试试这个,我想应该可以。
你可以使用一个全局的临时变量,比如说t &;当你发出 "错误!"的警告时,把它设置为1。然后在你的arrowHandler函数中,将if条件改为if(key==13 &&t==0),然后在你的代码&添加一个else部分,在那里你改变t=0。
另外,我想你的 parseInt(document.getElementById("col" + i))>20
语句应替换为 parseInt(document.getElementById("col" + i).value)>20
.
理想情况下,你不会使用 alert()
反而冒出 <div>
风格很好,将获得焦点,或显示出一个。<span>
表示失败消息,而不强迫用户确认。
如果你选择坚持使用 alert()
解决方法,@gopi1410 是正确的:在前面设置一个var,后面清空,意思是 "不要过滤按键"。
这里有一个更简单的版本。处理焦点是在一个单独的函数中完成的。不需要定时器和所有。希望能帮到你。
还有,就像其他人说的那样,请避免使用警报,请--如果你发现这样的东西,真的很恼火,不是吗?好好想想吧。
var handleFocus = function (i, error) {
var id = "col" + (error ? i : ++i);
if (id === 'col' + col) id = 'col0';
alert(id + " " + i + " " + error)
document.getElementById(id).focus();
};
var arrowHandler = function (evt, i) {
var key = window.event.keyCode;
if (key == 13) {
handleFocus(i, false);
}
};
var count = function (i) {
if (parseInt(document.getElementById("col" + i).value) > 20) {
alert("error!");
handleFocus(i, true);
}
};
你可以使用 计数 内功 arrowHandler 在if(key == 13)条件中加入 回假 在计数函数中
(等我有时间的时候再改进我的回答)