2014-01-17 50 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 []存在。如果有,我想確保選項值select不是0000.這將強制用戶選擇至少一年。

我應該怎麼辦?我想過在上面的jQuery代碼中創建一個跟蹤器。因此,每次點擊「添加另一年」時,我都會將其增加1。提交後,我的jQuery代碼將檢查此跟蹤器。如果它是1,那麼看看值是否爲0000,如果是,則提示用戶。

效率高嗎?有沒有另外一種方法來完成這個?

作爲一個方面說明 - 客戶希望多次下降像這樣。他不想要multiple =「multiple」列表。

+0

如果有一年以上的下拉列表中,您還可能要檢查它們中的至少一個改變從0000 – Brilliand

+0

阿很好的建議 – 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 
    } 
});