关于jquery多个bind事件的处理

hibernate_demo02 2012-11-02 11:03:06
关于jquery多个bind事件的处理
现在绑定了2个jquery的验证。
一个是点击 另一个 是失去焦点触发。


$('#name').bind('blur', function(){//失去焦点触发
if($('#name').val()!=null||!($('#name').val().euqals(''))){
var url = '${ctx}/ajax/ajax!checkName.action';
var data= "name=" + $('#name').val();
$.ajax({
url:url,
data:data,
type:'POST',
success:function(data){
$('#my').html(data);
}
});
}


$("#sumb").bind('click',function(){//点击验证
//$('#name').unbind();
var url = '${ctx}/ajax/ajax!organExist.action';
var data= {"provinceId":$('#province').val(),"cityId":$('#city').val(),"countyId":$('#county').val()};
$.ajax({
url:url,
data:data,
type:'POST',
success:function(data){
alert(data);
}
});
});


但是 我进入页面之后 先进第一个bind 失去焦点 判断 起作用了 。然后 点击恩扭 触发第2个 bind 就 会弹出2次alert
同时第一个 bind的验证失效。小弟初学jquery 求大神 帮忙解答下 谢谢了
...全文
298 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 2 楼 的回复:

你点击sumb按钮时,对name输入框来说就是blur状态了。

你若是就这么一个name需要验证的,那只保留后面的按钮事件即可,当然,成功提交后,还是要再服务器端再次验证其有效性
您的意思是 把 name这个blur事件放在 点击事件的后面? 然后点击sumbit时候 在执行这个验证?
[/Quote]

不是这个意思。简单点说吧。你现在的问题无非是name的验证结果还没返回就执行了整体的提交事件。那你将name的ajax请求由异步改为同步。就可以避免你这个问题了

一般有blur这种需求的大多是想验证唯一性的,那你哪怕是前台验证通过,提交到后台后还是要再次做有效性验证的。

PS:这种使用blur事件完成唯一性验证,其实最主要的目的是为了用户体验,而不是要靠它完成最终验证
hibernate_demo02 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你点击sumb按钮时,对name输入框来说就是blur状态了。

你若是就这么一个name需要验证的,那只保留后面的按钮事件即可,当然,成功提交后,还是要再服务器端再次验证其有效性
[/Quote]您的意思是 把 name这个blur事件放在 点击事件的后面? 然后点击sumbit时候 在执行这个验证?
rayaspnet 2012-11-02
  • 打赏
  • 举报
回复
click事件也触发了blur. 要用preventDefault阻止继续触发

$('#name').bind('blur', function(e){//失去焦点触发
if($('#name').val()!=null||!($('#name').val().euqals(''))){
var url = '${ctx}/ajax/ajax!checkName.action';
var data= "name=" + $('#name').val();
$.ajax({
url:url,
data:data,
type:'POST',
success:function(data){
$('#my').html(data);
}
});
e.preventDefault();
});


$("#sumb").bind('click',function(e){//点击验证
//$('#name').unbind();
var url = '${ctx}/ajax/ajax!organExist.action';
var data= {"provinceId":$('#province').val(),"cityId":$('#city').val(),"countyId":$('#county').val()};
$.ajax({
url:url,
data:data,
type:'POST',
success:function(data){
alert(data);
}
});
e.preventDefault();
});
Ace_Luffy 2012-11-02
  • 打赏
  • 举报
回复
是不是因为嵌套的原因,把两个bind分离了试看哦
泡泡鱼_ 2012-11-02
  • 打赏
  • 举报
回复
你点击sumb按钮时,对name输入框来说就是blur状态了。

你若是就这么一个name需要验证的,那只保留后面的按钮事件即可,当然,成功提交后,还是要再服务器端再次验证其有效性
hibernate_demo02 2012-11-02
  • 打赏
  • 举报
回复
jsp 部分代码

//名字失去焦点
<tr bgcolor="#FFFFFF">
<td class="form_key" width="10%"><font color="red">*</font>名称</td>
<td class="form_value"><input type="text" id="name" name="name"
size="40" value="${name}"
<%if (request.getAttribute("name") != null) {%> disabled="disabled"
<%}%> /> <label class="error" id="my"><font color="red">
</font></label></td>
</tr>

//点击sumbit 触发事件
<tr bgcolor="#FFFFFF">
<td class="form_key"> </td>
<td height="25"><input type="submit" class="button_mouseout"
id="sumb" onmouseout="this.className='button_mouseout'"
onmouseover="this.className='button_mouseover'" value="保存" />      

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧