2015-03-02 95 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已经完成了提交按钮或推迟提交,直到验证完成

希望这有助于:)