处理多个数组选择

时间:2014-01-17 00:13:28

标签: jquery

我的表单以div元素中的一个select开头。如果用户想要添加另一年,他们会点击“添加另一年”,复制下面的div元素并克隆它。

<div class="inputfield" id="modelyeardiv" class="modelyeardiv">
    <select name="frmyears[]" tabindex="3">
        <option value="0000">-- SELECT A YEAR --</option>
        <option value="2014">2014</option>
        <option value="2013">2013</option>
        <option value="2012">2012</option>
     </select>
     <a href="#" class="addmodelyear">Add Another Year</a>
</div>

点击“添加另一年”可以让我克隆它,以便用户可以选择多年。

$(document.body).on('click', '.addmodelyear', function(e) {
    e.preventDefault();
    $('#modelyeardiv').after($('#modelyeardiv').clone());
    return false;
});

现在,当我的表单提交时,我想检查是否只有一个frmyears []存在。如果有,我想确保选项值选择不是0000.这将强制用户选择至少一年。

我应该怎么做?我想过在上面的jquery代码中创建一个跟踪器。因此,每次点击“添加另一年”时,我会将其增加1。提交后,我的jquery代码将检查此跟踪器。如果为1,则查看该值是否为0000,如果是,则提示用户。

有效吗?还有另一种方法可以实现这个目标吗?

作为旁注 - 客户希望像这样多次下拉。他不想要多个=“多个”列表。

4 个答案:

答案 0 :(得分:1)

CSS / jQuery选择器“:selected:not([value = 0000])”应该可以解决问题:

if($("#modelyeardiv :selected:not([value=0000])").length == 0) {
    // User has not selected a year
}

答案 1 :(得分:1)

表单中的<select>元素是否会被提交?如果是这样,我认为只需检查名称为frmyears[]的只有一个,如果只有一个,那么在提交表单时检查所选值会更简单。像

这样的东西
$(document).on("submit", "form", function(e) {

    var selects = $(this).find("select[name='frmyears[]']");

    if (selects.length === 1 && selects.val() === "0000") {
        // stop form submission
        e.preventDefault();

        // do something else
    }  
});

答案 2 :(得分:0)

你的意思是他们只能从每个选择框中选择一个,但可以有多个选择框吗?

如果是这样,只需克​​隆具有相同属性名称的选择框,然后将在数组中提交值,即request.getParameterValues(“frmyears”)将返回选定年份的数组

<div class="inputfield" id="modelyeardiv" class="modelyeardiv">
    <select name="frmyears" tabindex="3" multiple>
        <option value="0000">-- SELECT A YEAR --</option>
        <option value="2014">2014</option>
        <option value="2013">2013</option>
        <option value="2012">2012</option>
     </select>
</div>

答案 3 :(得分:0)

认为我正在推翻这个问题。

if($('select[name="frmyears[]"]').length === 1) {
    alert('only one year -- check if its 0000');
}