2012-04-16 80 views
0

我有15个列表项。我允许用户从中选择5个。然后我把这个信息放到数组中并提交给服务器。限制选择数量并将选定数据插入到数组中

<li><a href="#" id="item1" class="select">Item One</a></li> ... etc. 

然后,我使用此代码来切换选择项目

function SelectPrizes(){ 
$('a.select').click(function() { 
    $(this).toggleClass("selected"); 
    $(this).text($(this).text() == 'Choose prize' ? 'Selected' : 'Choose prize'); 
    return false; 
}); 
} 

我的问题是,如何只允许5选择和由ID唯一选择的项目添加到数组的类。

我知道我可以通过hasClass('selected')进行过滤,但是我无法弄清楚正确的语法。

回答

1

回答你的三个问题:

允许5个选择:确保的$('a.select.selected')长度不超过你的极限5:

if ($('a.select.selected').length < 5) { 
    // Does not exceed, so we can add... 
} 

只有选定的项目添加到数组:只是“选择”添加类只有那些项目:

$('a.select.selected').each(function(){ 
    // Add to array 
}); 

hasClass的语法(“选择”)感到失望先生建议:

if ($(this).hasClass('selected')) { 

} 

失望先生的解决方案,如果你允许用户选择超过5个项目,然后选择刚才的任何5个工作其中。

此外,建议改善您的HTML。我假设李项目有一个UL父母。将这个类'select'设置为这个ul父级,并使用选择器:$('ul.select li a')。click()。

我已经把这个都聚集在一个的jsfiddle你:http://jsfiddle.net/5b8aj/6/

+0

真棒。非常感谢你,我重写了我的代码,我的确很讨厌。 – 2012-04-17 09:26:48

1

您可以使用slice(start, end)从指定索引开始,从选择中获取特定数量的结果。

var results = $("a.select").slice(0, 5); 

你问题的第二部分可以用条件检查回答:

关于是否选择5个元素提交决策
if ($(this).hasClass("selected")) { 

} 
1

检查下面的值不是 -

$('a.select[class*="selected"]').length==5 
相关问题