2010-07-22 87 views
3

「最新」選擇的選項的文字我有一個HTML選擇列表,它可以有多種選擇:獲取從多個選擇列表

<select id="mySelect" name="myList" multiple="multiple" size="3"> 
    <option value="1">First</option> 
    <option value="2">Second</option> 
    <option value="3">Third</option> ` 
    <option value="4">Fourth</option> 
    ... 
</select> 

我想獲得一個選項的文本,每次我選擇了它。我使用jQuery做到這一點:

$('#mySelect').change(function() { 
    alert($('#mySelect option:selected').text()); 
}); 

看起來很簡單,但是如果選擇列表已經有一些選擇的選項 - 它會返回自己的文字了。例如,如果我已經選擇了「第二」選項,選擇「第四」後,警報會給我這個 - 「SecondFourth」。那麼,有沒有簡單的方法使用jQuery獲取「當前」選定選項的文本,還是必須使用字符串進行播放並過濾新文本?

回答

3

你可以做這樣的事情,保持舊值數組和檢查其新的是不是在那裏,就像這樣:

var val; 
$('#mySelect').change(function() { 
var newVal = $(this).val(); 
for(var i=0; i<newVal.length; i++) { 
    if($.inArray(newVal[i], val) == -1) 
     alert($(this).find('option[value="' + newVal[i] + '"]').text()); 
} 
val = newVal; 
}); ​ 

Give it a try here,當您在<select multiple>稱之爲.val()它返回一個數組其所選<option>元素的值。我們只是簡單地存儲它,當選擇改變時,循環遍歷新值,如果新值在舊值數組中($.inArray(val, arr) == -1,如果未找到),那麼這就是新值。之後,我們只需使用attribute-equals selector來獲取元素並獲取其.text()

如果value=""五月包含引號或其他特殊字符,將與選擇干擾,使用.filter()代替,就像這樣:

$(this).children().filter(function() { 
    return this.value == newVal[i]; 
}).text()); 
0
var val = '' 
$('#mySelect').change(function() { 
    newVal = $('#mySelect option:selected').text(); 
    val += newVal; 
    alert(val); # you need this. 
    val = newVal; 
}); 

還是讓我們多打一些

val = ''; 
$('#id_timezone') 
    .focus(
    function(){ 
     val = $('#id_timezone option:selected').text(); 
    }) 
    .change(
    function(){ 
     alert(val+$('#id_timezone option:selected').text()) 
    }); 

乾杯。

+0

這將追加選擇每次(不只是你點擊一個)的所有選項,造成了非常大的/成長串:) – 2010-07-22 12:04:15

1

的選項,而不是選擇設置一個的onClick:

$('#mySelect option').click(function() { 
    if ($(this).attr('selected')) { 
     alert($(this).val()); 
    } 
}); 
+2

這不會在任何版本的IE中工作,但... – 2010-07-22 11:59:44

+0

確實。謝謝。 – Sjoerd 2010-07-22 12:05:34