2010-07-26 62 views
1

我有多個選擇標籤,看劇本請刪除選擇標籤中第一個選定元素的選定屬性?

<select multiple="multiple" size="5" id="cities_select"> 
    <option value="1">city1</option> 
    <option value="2">city2</option> 
    <option value="3">city3</option> 
    <option value="4">city4</option> 
    <option value="5">city5</option> 
    <option value="6">city6</option> 
    ................................ 
</select> 

和jQuery腳本:

$("#supply_cities_select").change(function() 
{ 
    var i = 1; 
    $('#supply_cities_select :selected').each(function(u) 
    { 
     src += '&c'+i+'='+$(this).val();//generates the string like &c1=1&c2=2&c3=7... 
     i++; 
    }); 
}) 

我需要我的字符串不要有元素大於5

例如:

如果我已經有5個選定的元素,我的字符串看起來像

&c1=2&c2=3&c3=5&c4=6&c5=7 

現在如果多了一個選項被選中,我需要得到字符串

&c1=3&c2=5&c3=6&c4=7&c5=8 

如果是短期,我需要先刪除所選元素的選擇屬性。

(但我不能用.first這裏,因爲它可以是元件N8選擇的第一個)

我該怎麼辦呢?

非常感謝。

UPDATE

var a = $("#supply_cities_select :selected").length; 
if(a > 5) 
{ 
    $("#supply_cities_select :selected:lt(1)").attr("selected",false); 
} 

它只是刪除所選的選項杉杉,不是嗎?


回答

2

你可以做到這一點稍微簡單一些usign .map():lt()這樣的:

var src; 
$("#supply_cities_select").change(function() { 
    src = $("#supply_cities_select :selected:lt(5)").map(function(i) { 
     return '&c'+(i+1)+'='+this.value; //i starts at 0, so add 1 
    }).get().join(''); 
})​; 

You can try a demo here:lt()選擇器獲得前5個(小於5,基於0,所以(0-4),然後我們使用.map()將值獲取到一個數組中,然後調用.join()以獲得該數組的字符串相加。


對於更新:拿到最後 5元,最好使用.slice(),像這樣:

var src; 
$("#supply_cities_select").change(function() { 
    src = $("#supply_cities_select :selected").slice(-5).map(function(i) { 
     return '&c'+(i+1)+'='+this.value; //i starts at 0, so add 1 
    }).get().join(''); 
})​; 

You can give it a try here

+0

謝謝了,我不t知道':lt()'方法,那麼另外一個解決方案呢,看看更新請 – Simon 2010-07-26 13:27:37

+0

但是這個答案呢? 「如果短小,我需要刪除第一個選定元素的選定屬性。」 我想有效做到這一點的唯一方法是實現一個隊列,並保持select元素旁邊。 這可能不是用戶體驗方面的最佳解決方案 - 沒有明顯的反饋意見表明第一個選定的項目現在未被選中,而當第一個選定的項目不在屏幕上時,這是複雜的。 – 2010-07-26 13:31:42

+0

@Syom - 我添加了如何獲取字符串,就好像該項目未被選中一樣,但我同意Simon從UI/UX的角度發表的評論,這可能不是最好的想法,因爲它只有5個高度。 – 2010-07-26 13:34:00

相關問題