2014-01-17 3 views
0

У меня есть форма, которая начинается с одного выбора внутри элемента div. Если пользователь хочет добавить еще один год, они нажимают «Добавить еще один год», который копирует элемент 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 и подскажите пользователю, если это так.

Является эффективным? Есть ли другой способ сделать это?

В качестве побочного примечания - клиенту требуется несколько выпадающих списков. Ему не нужен список с множественными = "множественными".

+0

Если есть более чем один год выпадающий, вы можете все еще хотите, чтобы проверить, что по крайней мере один из них был изменен с 0000. – Brilliand

+0

Ah хорошее предложение – Mike

ответ

1

CSS/JQuery селектор ": выбрано: нет ([значение = 0000])" следует сделать трюк:

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

отличное решение! Благодаря! – Mike

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> 
0

Думаю, я переусердствовал эту проблему.

if($('select[name="frmyears[]"]').length === 1) { 
    alert('only one year -- check if its 0000'); 
} 
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 
    } 
}); 
Смежные вопросы