2010-07-26 83 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

相关问题