javascript警报即使在单击“确定”后仍会持续触发
我有一个javascript警报即使在单击“确定”后仍会持续触发,javascript,jquery,html,Javascript,Jquery,Html,我有一个文本框,希望用户在其中添加整数,并且位数不应小于10 这里的问题是,即使在单击“确定”后,警报消息仍会持续触发。请说明代码有什么问题。还建议是否有其他好的方法来实现这一点 函数校验长度(el){ 如果(el.value.length!=10 | | el.getAttribute('data-should-alert')=='false'){ 警报(“接受至少10个号码”); el.setAttribute('data-should-alert','false'); el.focus(
文本框
,希望用户在其中添加整数,并且位数不应小于10
这里的问题是,即使在单击“确定”后,警报
消息仍会持续触发。请说明代码有什么问题。还建议是否有其他好的方法来实现这一点
函数校验长度(el){
如果(el.value.length!=10 | | el.getAttribute('data-should-alert')=='false'){
警报(“接受至少10个号码”);
el.setAttribute('data-should-alert','false');
el.focus();
}否则{
el.setAttribute('data-should-alert','true');
}
}
函数IsNumeric4(e){
var-keyCode=e.which?e.which:e.keyCode
var ret=((keyCode>=48&&keyCode我认为问题在于,在显示警报后,您正在聚焦,因为警报将再次触发模糊
setTimeout
提供了一种在警报后调用.focus()
的巧妙方法:
函数校验长度(el){
//这可能会导致一次警报,它将始终发出警报
if(el.value.length!=10/*| | el.getAttribute('data-should-alert')=='false'*/){
警报(“接受至少10个号码”);
el.setAttribute('data-should-alert','false');
//设定这个
setTimeout(函数(){
el.focus();
}, 10);
}否则{
el.setAttribute('data-should-alert','true');
}
}
函数IsNumeric4(e){
var-keyCode=e.which?e.which:e.keyCode
var ret=((keyCode>=48&&keyCode问题是当元素失去焦点时总是触发事件onblur
因此,一种解决方案是将该事件更改为onchange事件,而不是onblur
函数校验长度(el){
如果(el.value.length!=10 | | el.getAttribute('data-should-alert')=='false'){
警报(“接受至少10个号码”);
el.setAttribute('data-should-alert','false');
el.focus();
}否则{
el.setAttribute('data-should-alert','true');
}
}
函数IsNumeric4(e){
var-keyCode=e.which?e.which:e.keyCode
var ret=((keyCode>=48&&keyCode)此问题是因为警报()
将焦点从输入中移开,因此模糊事件在循环中重复触发。解决方案,切勿使用警报()
。改为以HTML显示消息。这是因为您正在验证模糊事件中的字段,所以每当您单击“确定”按钮时,它将再次触发模糊event@RoryMcCrossan:如何以及在何处显示消息。?@AlpeshJikadra:要在上使用其他事件吗?请告诉我,如果您想以这种方式进行测试,那么最好使用console.log
而不是使用alert
您在这方面做了哪些更改?是的,尝试一下。如果有更好的方法,请使用并告诉我,因为这种方法非常棘手。因为您的条件始终是真实的。好的,我已经修改了。请查看一下。您应该按照您的方式设置条件。在对条件的这一部分进行注释后,con连续警报不会再次显示,请尝试检查..感谢快速解决方案伙伴!但这不会再次触发警报。当用户单击任意位置时,将触发警报else@BNN打电话给focus并清理价值怎么样?这样就可以了work@BNN你可以找到你想用的方法。