jquery如何终止一个事件
如下代码:$("a.reply").click(function(){//点击'回复'触发//两处append调用都是供测试用,项目中为对应处其他功能代码$('body'...
如下代码:
$("a.reply").click(function(){ //点击'回复'触发
//两处append调用都是供测试用,项目中为对应处其他功能代码
$('body').append('<div id="test">执行到节点1</div>');
$('#b'+id1).bind('blur',function(){
$('body').append('<div id="test">执行到节点2</div>');
})
return false;
})
我想要的效果是用户点击一次’回复‘并获得相应响应后,程序就退出这次点击事件,之后再次对'回复'的点击互不影响,彼此独立。但是进行测试操作:
点击'回复'触发click事件--->再触发blur事件----->再点击'回复'触发click事件------>再触发blur事件 -----再click---->再blur
结果却是:" 执行到节点1-----执行到节点2----->执行到节点1------>执行到节点2------->执行到节点2----->执行到节点1------>执行到节点2------->执行到节点2-----执行到节点2> "
说明之后对'回复'按钮的点击也是包含在第一次点击事件里的。
请问怎样才能使各次对'回复'的点击事件相互独立?新手求教~不胜感激! 展开
$("a.reply").click(function(){ //点击'回复'触发
//两处append调用都是供测试用,项目中为对应处其他功能代码
$('body').append('<div id="test">执行到节点1</div>');
$('#b'+id1).bind('blur',function(){
$('body').append('<div id="test">执行到节点2</div>');
})
return false;
})
我想要的效果是用户点击一次’回复‘并获得相应响应后,程序就退出这次点击事件,之后再次对'回复'的点击互不影响,彼此独立。但是进行测试操作:
点击'回复'触发click事件--->再触发blur事件----->再点击'回复'触发click事件------>再触发blur事件 -----再click---->再blur
结果却是:" 执行到节点1-----执行到节点2----->执行到节点1------>执行到节点2------->执行到节点2----->执行到节点1------>执行到节点2------->执行到节点2-----执行到节点2> "
说明之后对'回复'按钮的点击也是包含在第一次点击事件里的。
请问怎样才能使各次对'回复'的点击事件相互独立?新手求教~不胜感激! 展开
展开全部
首先你要理解一点,jQuery 的绑定事件是能够叠加的,比如对一个div 绑定的多次 blur 事件,在触发的时候 多个绑定在div 上的blur 事件都会执行;
<div id="demo'></div>
$( '#demo' ).bind( 'blur', function(){} );
$( '#demo' ).bind( 'blur', function(){} );
$( '#demo' ).bind( 'blur', function(){} );
比如以上对 demo 绑定了 3 次blur 事件,那么在触发blur 事件的时候 3 个都会执行;
想要只执行最后一次绑定的时间而忽视之前绑定的事件,就要在下一次绑定事件之前先解除原先绑定的事件,再绑定新的事件
<div id="demo'></div>
$( '#demo' ).bind( 'blur', function(){
$( '#demo' ).unbind( 'blur' ); // 在执行完 blur 事件后解除绑定的事件或者在其他的地方解除绑定也行;
} );
原理说多了,其实楼主的代码改法很简单,
$('#b'+id1).bind('blur',function(){
$('body').append('<div id="test">执行到节点2</div>');
})
把这个事件绑定写到 click 外面去,然后在 click 里面写上模拟 blur 事件的代码就可以了,这样就保证了blur 事件只绑定了一次,而不是在每次click 之后叠加绑定了新的事件
$("a.reply").click(function(){
//点击'回复'触发
//两处append调用都是供测试用,项目中为对应处其他功能代码
$('body').append('<div id="test">执行到节点1</div>');
$('#b'+id1).blur(); // 执行绑定的 blur 事件
return false;
})
$('#b'+id1).bind('blur',function(){
$('body').append('<div id="test">执行到节点2</div>');
})
<div id="demo'></div>
$( '#demo' ).bind( 'blur', function(){} );
$( '#demo' ).bind( 'blur', function(){} );
$( '#demo' ).bind( 'blur', function(){} );
比如以上对 demo 绑定了 3 次blur 事件,那么在触发blur 事件的时候 3 个都会执行;
想要只执行最后一次绑定的时间而忽视之前绑定的事件,就要在下一次绑定事件之前先解除原先绑定的事件,再绑定新的事件
<div id="demo'></div>
$( '#demo' ).bind( 'blur', function(){
$( '#demo' ).unbind( 'blur' ); // 在执行完 blur 事件后解除绑定的事件或者在其他的地方解除绑定也行;
} );
原理说多了,其实楼主的代码改法很简单,
$('#b'+id1).bind('blur',function(){
$('body').append('<div id="test">执行到节点2</div>');
})
把这个事件绑定写到 click 外面去,然后在 click 里面写上模拟 blur 事件的代码就可以了,这样就保证了blur 事件只绑定了一次,而不是在每次click 之后叠加绑定了新的事件
$("a.reply").click(function(){
//点击'回复'触发
//两处append调用都是供测试用,项目中为对应处其他功能代码
$('body').append('<div id="test">执行到节点1</div>');
$('#b'+id1).blur(); // 执行绑定的 blur 事件
return false;
})
$('#b'+id1).bind('blur',function(){
$('body').append('<div id="test">执行到节点2</div>');
})
追问
我懂你的意思了,谢谢!
不过,假设我之前恰恰通过一句 $('#b'+id1).focus 让其得到焦点并且焦点需要暂时保持,不能在click事件内部写上模拟 blur 事件,这怎么办?
追答
模拟事件的话,什么时候在哪里需要就在哪里加上,不需要就去掉;
如果是写在事件内部,而有时候某种情况下又不需要执行,那就用参数来控制;定义一个参数,什么情况下模拟,什么情况下不模拟
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询