Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
Javascript 我能';不要停止Chrome中的警报方法_Javascript_Google Chrome_Dom Events_Alert - Fatal编程技术网

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;
    }   
}