按钮单击事件由于文本框onblur事件中的警告框而丢失

Vin*_*til 6 javascript textbox onchange button onblur

我创建了一个简单的Web表单,其中包含一个文本框和一个按钮.我已经捕获了文本框的onblur事件.

<html xmlns="http://www.w3.org/1999/xhtml" >  
<head runat="server">  
    <title>Untitled Page</title>  
    <script language="javascript" type="text/javascript">  
    function onTextBoxBlur()  
    {  
        alert("On blur");  
        return true;  
    }  
    </script>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <asp:TextBox ID="TextBox1" runat="server" onblur="onTextBoxBlur();"></asp:TextBox>  
    <asp:Button ID="Button1" runat="server" Text="Button" />  
</form>  
</body>  
</html>
Run Code Online (Sandbox Code Playgroud)

当我在文本框中输入一些值并单击按钮时,会出现文本框的onblur事件,但按钮的onclick却没有.并且,当我从js函数中删除警报框时,它工作正常.按钮点击事件的一些方法将丢失.我认为这是由于警报框.知道为什么会这样吗?

And*_*y E 6

单击按钮有两个部分,鼠标按下和鼠标按下.当您在按钮上按下鼠标时,它会获得焦点 - 模糊文本框并触发警报.由于警报对话框是模态的,因此它们会停止页面上的所有活动,因此按钮不会检测到鼠标,并且您的点击不会完成.

可以使用模糊事件中的计时器解决您的问题,并在按钮的mousedown事件中取消该计时器:

var timer;
function onTextBoxBlur()  
{  
    timer = window.setTimeout(function () { alert("On blur"); }, 0);  
    return true;  
}  

function onButtonMouseDown()
{
    clearTimeout(timer);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果用户实际上没有单击按钮,则在警报后显式调用按钮单击可能会出现问题.on blur可能由于各种原因而发生,例如单击远离文本框和按钮的背景.也许甚至会在您点击浏览器时发生?像OnBlur这样的事件太通用了,无法调用像这样的其他函数. (2认同)