我想通过它处理元素事件,因为id是在运行时定义的。
<input type='submit' name='status' value='like' id='like'/>
$('#like').live('click',function(){
alert('like');
$(this).attr({'id':'unlick','value':'unlike'});
});
$('input').delegate('#unlike','click',function(){
alert('unlike');
$(this).attr({'id':'lick','value':'like'});
});
这是问题的demo
答案 0 :(得分:1)
答案 1 :(得分:0)
Typo队长再次罢工。将unlick
替换为unlike
,并将live()
替换为第二个处理程序:
$('#like').live('click',function(){
alert('like');
$(this).prop('id', 'unlike').val('unlike');
});
$('#unlike').live('click',function(){
alert('unlike');
$(this).prop('id', 'like').val('like');
});
您还应该使用.prop()
设置ID,.val()
设置值。
哦,考虑不更改ID,而是在数据属性中存储标志(如/不同),并在事件处理程序中检查它。然后,您不需要直播活动或代表,但可以简单地绑定常规活动。
答案 2 :(得分:0)
我会做类似下面的事情,而不是写2个处理程序,
<强>标记:强>
<input type='submit' name='status' class="like_status" value='like' id='like'/>
<强> JS 强>
$('.like_status').on('click',function(){
alert(this.id);
if (this.id == 'like') {
$(this).attr({'id':'unlike','value':'unlike'});
} else {
$(this).attr({'id':'like','value':'like'});
}
});
或者您可以简单地使用this.id
和this.value
代替jQuery函数。
$('.like_status').on('click',function(){
var btnTxt = (this.id == 'like')?'unlike': 'like';
this.id = btnTxt;
this.value = btnTxt; //Or some other text.
});