处理在运行时定义id的元素的事件

时间:2012-05-17 20:57:11

标签: jquery events event-handling

我想通过它处理元素事件,因为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

3 个答案:

答案 0 :(得分:1)

有些拼写错误,您可以使用.on来表示喜欢和不同。

这是一个有效的例子:

http://jsfiddle.net/CgKwt/2/

答案 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.idthis.value代替jQuery函数。

$('.like_status').on('click',function(){
    var btnTxt = (this.id == 'like')?'unlike': 'like';
    this.id = btnTxt;
    this.value = btnTxt;  //Or some other text.
});

DEMO