Javascript 我能';不要停止Chrome中的警报方法
我有一个输入文本和一个用于检查输入文本值的按钮 加载网页时,输入文本具有焦点,默认情况下该值为空 因此,当您将焦点置于输入文本之外(Javascript 我能';不要停止Chrome中的警报方法,javascript,google-chrome,dom-events,alert,Javascript,Google Chrome,Dom Events,Alert,我有一个输入文本和一个用于检查输入文本值的按钮 加载网页时,输入文本具有焦点,默认情况下该值为空 因此,当您将焦点置于输入文本之外(onblur)时,检查输入值(事件)函数在输入文本值为空时执行一次警报(“您的输入值不得为空”) 这在Firefox中非常有效。但在Chrome中,此警报将无限期执行,而不是一次 下面是代码(您可以在以下位置试用(使用Chrome试用): //获取输入文本元素: input_text=document.getElementById(“input_text”); /
onblur
)时,检查输入值(事件)
函数在输入文本值为空时执行一次警报(“您的输入值不得为空”)
这在Firefox中非常有效。但在Chrome中,此警报将无限期执行,而不是一次
下面是代码(您可以在以下位置试用(使用Chrome试用):
//获取输入文本元素:
input_text=document.getElementById(“input_text”);
//将焦点放在输入文本中:
输入_text.focus();
/*在输入文本元素中添加事件侦听器。
在模糊上,如果输入值为空,则执行检查输入值(事件)函数
要检查输入文本值,请执行以下操作:
*/
输入文本。addEventListener('blur',
功能(事件)
{
var event=window.event | | event;
检查输入值(事件);
}
错误的
);
//用于检查输入文本值的函数:
//如果输入值为空,则显示警报“您的输入值不得为空”,并将焦点放在输入文本中。
功能检查输入值(事件)
{
var event=window.event | | event;
如果(输入_text.value==“”)
{
警报(“您的输入值不得为空”);
输入_text.focus();
返回false;
}
}
那么,如何在Chrome中执行一次警报而不是无限期执行?Chrome将无限期执行而不是一次警报,因为您的函数总是将焦点返回到输入文本,并且总是更改将调用的函数的焦点。在Firefox中工作得很好,因为输入文本不会在javascript函数的末尾接收焦点。
如果删除
input_text.focus()代码>它将开始工作。感谢您提供到JSFIDLE的链接。我试着处理它,发现输入_text.focus()被递归调用
我评论了这一点,它起了作用。我认为应该在调用可能不是递归的地方调用input_text.focus()
这是我尝试的链接:
如果只显示一次警报框后需要在文本框上保持焦点,可以使用临时变量,如我在注释中所述,可以实现如下相同目的:
//Get the input text element :
input_text = document.getElementById("input_text");
//Put focus in input text :
input_text.focus();
var temp = 0;
/*Add event listener in the input text element.
On blur, if your input value is empty, then execute check_input_value(event) function :
*/
input_text.addEventListener('blur',
function(event)
{
var event = window.event || event;
if(temp == 0)
{
check_input_value(event);
}
else
{
button_focus();
}
}
, false);
//Function for checking input text value :
//if the input value is empty, display alert "Your input value must not empty", and put focus in input text.
function check_input_value(event)
{
var event = window.event || event;
if(input_text.value == "")
{
alert("Your input value must not empty");
input_text.focus();
temp = 1;
return false;
}
}
function button_focus()
{
if(input_text.value == "")
{
input_text.focus();
}
temp = 0;
return false;
}
希望有帮助。这似乎是Chrome52()中的一个bug。出现的一种解决方法是删除模糊事件并在超时后重新连接:
if(input_text.value == "")
{
alert("Your input value must not empty");
var tmpBlur = input_text.blur;
input_text.blur = null;
setTimeout(function() {
input_text.focus();
input_text.blur = tmpBlur;
}, 0);
return false;
}
编辑:
但是,当您在窗口外单击时,看起来仍然会得到相同的无限循环。另一种解决方法是分配不同的值,然后在超时时重新分配该值:
if(input_text.value == "")
{
alert("Your input value must not empty");
input_text.value = ' ';
setTimeout(function() {
input_text.focus();
input_text.value = '';
}, 0);
return false;
}
我也面临同样的问题;我通过使用setTimeout
方法调用focus
方法解决了这个问题。
代码如下:
function check_input_value(event)
{
var event = window.event || event;
if(input_text.value == "")
{
alert("Your input value must not empty");
setTimeout (function(){input_text.focus()}, 0);
return false;
}
}
详细说明这个问题。您想要什么??在Firefox中,当您在输入文本外单击时,将显示警报,当您单击警报的“确定”按钮时,将不再显示警报=>无问题。但在chrome中,当您单击警报的“确定”按钮时,会显示另一个警报:我想停止第二个警报。谢谢,那么我如何将焦点放在警报后的输入文本中?谢谢,那么我如何将焦点放在警报后的输入文本中?您可以使用一些临时变量仅允许警报()框仅在第一次和以后可见,而不是显示警报,它应仅将焦点设置为文本框。我编辑了此链接:并且正在工作。谢谢,但是当我再次在空输入文本中聚焦并再次模糊时,不会显示任何警报编辑了我的答案,添加了temp=0;在返回之前,请单击按钮\焦点()函数。它将再次显示警报框。希望这能解决你的问题。请在以下链接上找到它:My荣幸@ToToUssi,感谢您的反馈,如果它解决了问题,请将答案标记为已接受,以便每个有类似问题的人都能找到合适的解决方案:)
if(input_text.value == "")
{
alert("Your input value must not empty");
input_text.value = ' ';
setTimeout(function() {
input_text.focus();
input_text.value = '';
}, 0);
return false;
}
function check_input_value(event)
{
var event = window.event || event;
if(input_text.value == "")
{
alert("Your input value must not empty");
setTimeout (function(){input_text.focus()}, 0);
return false;
}
}