2012-05-09 99 views
0

我有這個HTML。使用jQuery切換錨標記的屬性值

<a href="#" class="button redB" style="margin: 4px 4px 4px -4px;" id="estEditItemToggleMode" data-mode="edit"> 
    <img src="images/icons/light/check.png" alt="" class="icon"> 
    <span>Enable Editing Mode</span> 
</a> 

上點擊我要繼續切換class屬性的值,並data-mode 它應該像這樣

if(mode == "edit") { 
    class = "button blueB"; 
    data-mode = "select"; 
} 
else if(mode == "select") { 
    class = "button redB"; 
    data-mode = "edit"; 
} 

我試圖用這個。

$('#estEditItemToggleMode').live('click', function(e){ 
    e.preventDefault(); 
    if($(this).data('mode') == "edit") { 
     $(this).removeClass('redB').addClass('blueB'); 
     $(this).attr('data-mode', 'select'); 
    } 
    else if($(this).data('mode') == "select") { 
     $(this).removeClass('blueB').addClass('redB'); 
     $(this).attr('data-mode', 'edit'); 
    } 
}); 

這隻能切換值一次。因此對兩次或多次點擊沒有影響。如何正確使用。

+0

e.preventDefault(); 可以刪除此行並嘗試? – coolguy

+0

嘗試過,即使它只切換一次:( –

回答

2

嘗試像下面,

DEMO

$('#estEditItemToggleMode') 
    .data('mode', 'edit') //added data to the link 
    .live('click', function(e){ 
     e.preventDefault(); 

     var $this = $(this); 
     var mode = $this.data('mode'); 

     if(mode == "edit") { 
      $this.removeClass('redB').addClass('blueB'); 
      $this.data('mode', 'select'); //Changed from .attr to .data 
     } 
     else if(mode == "select") { 
      $this.removeClass('blueB').addClass('redB'); 
      $this.data('mode', 'edit'); //Changed from .attr to .data 
     } 
}); 

,並從標記刪除ATTR data-mode

<a href="#" class="button redB" style="margin: 4px 4px 4px -4px;" id="estEditItemToggleMode" > 
    <img src="images/icons/light/check.png" alt="" class="icon"> 
    <span>Enable Editing Mode</span> 
</a> 

編輯:緩存一些多餘的jQuery調用。

編輯2:.live已被棄用所以你應該或者使用.on.delegate

編輯3:小提琴輸出,

enter image description here

+0

不行,我自己得到了解決方案,我不得不在if條件中更改爲'$(this).attr('data-mode')' ,無論如何+1爲您的努力。它嘗試併發布問題後,現在的作品。 –

+0

這不會改變'數據模式'的價值,儘管類切換。 –

+0

如果你可以修復它,不接受你的答案 –