2012-05-17 15 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

相關問題