2009-10-02 204 views
1

我創建了一個非常簡單的測試頁來複制我在我的應用程序中遇到的問題。如果這看起來很長,對於一些如此微不足道的事情來說很長時間。OnClick事件不會觸發

在.aspx頁面

<body> 
<form id="form1" runat="server"> 
    <asp:TextBox ID="tb" runat="server"></asp:TextBox> 
    <asp:Button ID="btnOk" runat="server" text="OK" Width="60px" UseSubmitBehavior="true" OnClientClick="saveAmendments();" /> 
</form> 

在代碼在Page_Load我後面加一個onchange屬性的文本框

if (!IsPostBack) 
    { 
     tb.Attributes.Add("onchange", "addSaveDetails('abc###123###456###test###abc###');"); 
    } 
} 

它得到呈現如下

<body> 
    <form name="form1" method="post" action="TestJP.aspx" id="form1"> 
    <div> 
     <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUi3er8ht8oaCZzy2..." /> 
    </div> 

    <div> 
     <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKOoa..." /> 
    </div> 

    <input name="tb" type="text" value="testtt" id="tb" onchange="addSaveDetails('abc###123###456###test###abc###');" /> 
    <input type="submit" name="btnOk" value="OK" onclick="saveAmendments();" id="btnOk" style="width:60px;" /> 
</form> 

因此,如果我更改文本框中的值並單擊其他屏幕上的AddSaveDetails函數觸發。然後點擊該按鈕並激活saveAmendments。但是,如果您更改文本,然後立即點擊按鈕(而不是首先在屏幕上的其他位置),並且只激活第一個(onchange)功能。 onClick事件永遠不會。被調用的js除了警報之外別無其他。什麼可以阻止事件冒泡到最後的呼叫?

回答

4

除了警報之外,嘗試從您的函數返回true。我認爲事件動作傳播正在被停止,因爲你正在返回false(或者什麼也沒有,這被解釋爲false)。

0

真氣。謝謝tvanfosson。它讓我走上了正確的軌道,但我不需要明確地返回true

在我的js函數中我有一個調試器;聲明。這是搞砸了東西。

I.e.註釋掉調試固定的東西..

function addSaveDetails(strDetails) { 
debugger; 
alert('func1'); 
//return true; 

}

是什麼樣的調試器;這可以防止第二個事件發生!哎呀。事實證明,我實際上創造了一個問題,試圖解決一個不存在的問題!