2010-07-14 26 views
6

我創建了一個簡單的Web窗體,其中包含一個文本框和一個按鈕。我已經捕獲了文本框的onblur事件。由於文本框中的警告框而丟失的按鈕單擊事件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> 

當我輸入在文本框中輸入某個值,然後單擊該按鈕,然後文本框的onblur事件發生,但按鈕的onclick沒有。而且,當我從js函數中刪除警告框時,它工作正常。一些如何點擊按鈕是事件丟失。我認爲這是由於警報框。任何想法爲什麼是這樣?

回答

6

按鈕的「單擊」有兩部分,鼠標向下和鼠標向上。當您按下按鈕時,它會獲得焦點 - 模糊文本框並觸發警報。由於警報對話框是模態的,因此它們會暫停頁面上的所有活動,以便按鈕不會檢測到鼠標並且點擊無法完成。

,便有可能使用定時器模糊事件中,和取消按鈕的MouseDown事件內的計時器來解決您的問題:

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

function onButtonMouseDown() 
{ 
    clearTimeout(timer); 
} 
+0

有沒有這方面的workarround? – 2010-07-14 11:44:56

+0

@Vinod T.Patil:不是。唯一的「解決方法」是等待點擊完成或避免使用「alert」。 – 2010-07-14 11:52:48

+0

一種方法是,顯式調用按鈕單擊,如alert.getElementById(「Button1」)。click();, alert後。有用。但是,對於這樣的示例應用程序來說,實際上在表單上可能有其他文本框,在這種情況下,我不想在離開第一個文本框後立即觸發按鈕單擊。 – 2010-07-14 12:37:02

1

編寫一個函數,給個電話從運作 按鈕的鼠標按下和的onclick事件

2

明白了....我得到它的工作...

在onblur事件添加顯式調用按鈕的點擊不正確的,因爲onblur事件隨時可能發生,像當我們呃移動到其他文本框或單擊表格中的任何位置(如上面評論中的Corey Ogburn所述)。所以點擊按鈕會被觸發,儘管用戶並沒有點擊按鈕。

因此,在onblur事件中,應該有一種方法來確定提交被點擊,並且如果它是明確地觸發按鈕的點擊。下面是代碼,

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script language="javascript" type="text/javascript"> 
    var clicked = 0; 

    function onTextBoxBlur() 
    { 
     alert("On blur " + clicked);  

     if(1 == clicked) 
     { 
      clicked = 0; 
      document.getElementById("Button1").click(); 
     } 

     return true; 
    } 
    function SubmitButtonClicked() 
    { 
     clicked = 1; 
    } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server" > 
    <div> 

    </div> 
    <asp:TextBox ID="TextBox1" runat="server" onfocusout="onTextBoxBlur();"></asp:TextBox> 
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
    <asp:Button ID="Button1" runat="server" Text="Button" onmousedown="SubmitButtonClicked();" />  
    </form> 
</body> 
</html> 

這裏,按鈕,這發生前的onblur文本框的的MouseDown事件中,我有一個值設置爲標誌clicked和的onblur文本框的,現在我可以確定按鈕是否被點擊。

但是,再次,這只是一個workarround和OK這樣的示例應用:)。它在實際中不太可行,因爲webform上可能會有更多這樣的提交按鈕,我們將不得不觸發文本框的onblur事件中的所有按鈕(鏈接等)的單擊事件。這是因爲用戶可以在將數據輸入到文本框後點擊任何提交按鈕(鏈接等),並在onblur中進行提醒/確認以抑制這些點擊事件。希望我清楚。

Enjoy !!!

相關問題