2015-03-02 61 views
1

我的代碼依賴onBlur來驗證用戶標識,但是如果用戶只是鍵入用戶,然後直接點擊提交按鈕,onBlur事件不會觸發。OnClick事件正在繞過onurl事件

<td><input type='text' name="USERID" onBlur="doValidateUserID(this)"></td> 
<td><input type="button" name="assetSaveButton" value="Save" onClick="doSomeStuff(this)"></td> 

下面是僞Ajax調用

function doValidateUserID(userID) { 
// ajax call goes here 
} 

我的問題是doValidateUserID甚至沒有被在價值用戶類型後打來電話,點擊提交按鈕。我試着用onChange代替onBlur,但徒勞無益。

編輯:顯然,添加警報已經改變了事件的行爲,現在點擊保存按鈕,doValidateUserID被調用,但doSomeStuff被完全跳過。我必須再次點擊呼叫doSomeStuff

+1

那麼,您需要將您的代碼流更改爲'assetsSaveButton.on('click',function ...)',使用'ep reventDefault()'並在該位置驗證,然後手動提交。 – Davion 2015-03-02 11:15:24

+4

我無法重現該問題:http://jsbin.com/fewatutuve/1/edit?html,output – Quentin 2015-03-02 11:16:08

+0

我在代碼中添加了警報,並嘗試再次運行它,將很快發佈結果。 – 2015-03-02 11:32:43

回答

3

onblur將始終在點擊之前調用,但由於您在處理程序中執行了ajax調用,所以ajax結果調用將始終在click事件之後運行,因爲它是非阻塞的(除非你將其設置爲同步,我會建議對)

我會建議您阻止,直到AJAX已經完成了提交按鈕或推遲提交,直到驗證完成

希望這有助於:)