2013-06-11 37 views
0

我感覺我在這裏呆了幾天後錯了。
試圖使用<select>來跟蹤多個客戶端選擇。選擇多個<option>保持跟蹤選定的元素

<div id="ajax"> 
<select id="select_site" name="site" multiple> 
    <option value="" selected>checked</option> 
    <option value="" selected>checked</option> 
    <option value="">unchecked</option> 
    <option value="">unchecked</option> 
</select> 
<button id="continue" type="button">Save</button> 
</div> 

期望的結果:
點擊檢查警報( '從檢查減去')
點擊選中警報( '添加到檢查')

$('#ajax').on('click', '#select_site option', function() { 
    var checked = $('#select_site option:selected'); 
    if ($(this).prop('selected') == 'selected') { 
    alert('subtract from checked'); 
    } else { 
    alert('add to checked'); 
    } 
    $('#select_site').empty(); 
    $.each(checked, function (i, v) { 
    $('#select_site').append(v); 
    }); 
    }); 

$('#ajax').on('click', '#continue', function() { 
    var checked = $('#select_site option:selected'); 
    alert(checked); 
}); 

jsFiddle

感謝您的幫助!

回答

1

腳本中存在一些錯誤。

1:它不會出現在鼠標點擊上,而是出現在mousedown上,因此您可以預先設定默認行爲。

2:正如我所說,你需要阻止默認行爲,所以你這NNED:

pseudo-on(function(e){ 
    e.preventDefault() 
    //Your code 
}) 

3:使用.prop()返回一個布爾值,所以在此刻,你的狀態永遠是假的。您的情況可能很簡單if ($(this).prop('selected'))

4:由於默認行爲被阻止,您需要手動添加或刪除選定的選項。

5:由於您手動選擇選項,因此必須聲明var checked

6:我不知道你想用.each()循環做什麼,但我認爲你不需要我的解決方案。在這種情況下,var checked也是無用的。

這裏有一個工作小提琴:http://jsfiddle.net/akshC/1/

+0

欣賞你的迴應。我已經試過1,2,&4.使用firefox v21.0去了你的小提琴,它沒有工作。使用safari 5.1.7它工作。所以我想知道'compadabily'問題?我甚至從哪裏開始? (以爲jQuery負責這個)。再次感謝! – ron

+0

是的,試圖谷歌一點點,無法找到任何東西,對不起:/ –