2012-05-17 18 views
0

我想通过它处理元素的事件,因为id是在运行时定义的。在运行时定义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'}); 
    }); 

下面是问题

+0

第一个问题是你混 '不像' 和 'unlick'。 – j08691

回答

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

+0

这是非常好的方法:) – palAlaa

0

错字队长再次撞击demo。与unlike更换unlick和使用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,但将标志(像/不像)存储在数据属性中,并在事件处理程序中检查它。然后,您不需要直播活动或代理,但可以简单地绑定常规活动。

+0

它不工作,它不处理事件! – palAlaa

+0

当然,如果您将ID设置为“unlick”,但不检查“不像”的事件,则无法处理事件。 – ThiefMaster

+1

强制性:从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。 – j08691

1

一些错别字,你可以使用.on为喜欢和不喜欢。

这里有一个工作示例:

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

+1

从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。 – j08691

+0

将id更改为“不”时它不工作,它仍然处理类似的事件! – palAlaa

+0

@PalAla ah在从'.live'改为'.on'时没有测试,我现在更新了链接。 – Timm

相关问题