2012-09-15 109 views
3

請告訴我爲什麼div與編號AudioVol+..(ex.1,2,3 and other) 不要更改類名稱,當點擊類名稱的元素option_audio_player_mute不能更改元素類別點擊

也告訴我,我可以減少/重構我的代碼?

$('.option_audio_player_mute').live('click', function() { 
    var idn = this.id.split('+')[1]; 
    var vol1 = $('#AudioVol1+' + idn); 
    if ($(this).hasClass('audio_mute')) { 
     vol1.removeClass('audio_vol_not_active').addClass('audio_vol_active'); 
    } else if ($(this).hasClass('audio_not_mute')) { 
     vol1.removeClass('audio_vol_active').addClass('audio_vol_not_active'); 
    } 
}); 

爲什麼不能正常工作?

+0

您還可以向我們展示HTML部分嗎?順便說一句''.live()''在'1.8.x'棄用,你需要使用'.on()' – balexandre

+1

儘量避免使用'+',使用'_'因爲你不需要轉義它們在寫javascript時。 – balexandre

+0

也很好的緩存jquery對象'$(this)'在一個本地變量中,它可以提高複雜頁面的性能 – Vivek

回答

1

+符號在CSS(和jQuery)選擇器中有特殊含義:它用於指定adjacent sibling selectors

嘗試用兩個反斜槓逃離+登錄您的ID選擇:

var vol1 = $("#AudioVol1\\+" + idn); 
+0

謝謝你的幫助 –

1

你可以使用.toggleClass,並使用.on代替.live

$(document).on('click', '.option_audio_player_mute', function() { 
    var vol1 = $("#AudioVol1\\+" + this.id.split('+')[1]), 
     $this = $(this); 
    vol1.toggleClass('audio_vol_active', $this.hasClass('audio_mute')) 
     .toggleClass('audio_vol_not_active', $this.hasClass('audio_not_mute')); 
});