我有一個4輸入(甚至可以更多)的表單,用戶可以放置一個數字或什麼都不是。唯一的規則是,如果您在輸入中輸入數字,則如果在另一個輸入中輸入相同的數字(無重複),則無法提交數字。您可以根據需要提交儘可能多的空輸入。基於長度比較兩個數組:跳過空值
爲了驗證輸入,我只用唯一值比較了具有相同數組的所有輸入數組的長度。如果他們有相同的長度沒關係。 我需要改進我的代碼,因爲現在只有當用戶輸入所有輸入字段時纔有效。如果某些輸入爲空,則它們在數組中被視爲具有唯一值,因爲它們都具有「」作爲值。所以,如果用戶只輸入一個數字,我會得到數組長度爲4,數組唯一爲2,但它應該是1和1(跳過空白項)。
我在考慮在arr
上使用splice()
,但是這是做這種驗證的最好方法嗎? **編輯:我應用拼接,但如果數組是('1','','')我的代碼給我('1',''),而不僅僅是(1),因爲我期望... **這是因爲拼接刪除項目並更改數組長度,以便for循環指向錯誤的索引。 有什麼想法? HTML:
<div class="sez-form">
<fieldset>
<legend>Messaggi inclusi</legend>
<div class="percheckbox">
<input class="checkseq" type="checkbox" value="1" name="messaggio[0]">
Prova di messaggio che scorre<br>
<label>Ordine: </label>
<input class="seq" type="text" name="ordine[0]" maxlength="2" size="2">
</div>
<div class="percheckbox">
<input class="checkseq" type="checkbox" value="3" name="messaggio[1]">
Titoli di film<br>
<label>Ordine: </label>
<input class="seq" type="text" name="ordine[1]" maxlength="2" size="2">
</div>
<div class="percheckbox">
<input class="checkseq" type="checkbox" value="6" name="messaggio[2]">
Prova a testo fisso<br>
<label>Ordine: </label>
<input class="seq" type="text" name="ordine[2]" maxlength="2" size="2">
</div>
<br style="clear: both;">
</fieldset>
</div>
JAVASCRIPT:
function uniqueArray(arr) {
return $.grep(arr,function(v,k) {
return $.inArray(v,arr) === k;
});
}
$(document).ready(function() {
$('#invia').click(function(e) {
e.preventDefault();
var arr = $(".seq").map(function(){ return $(this).val(); }).toArray();
var empty = $(".seq").filter(function() {
return this.value == "";
})
for (index = 0; index < arr.length; ++index) {
if (arr[index]=='') {
new_arr = arr.splice([index],1);
}
console.log(arr);
}
if(empty.length == $('.seq').length) {
alert('Non hai scelto alcun messaggio per il workflow. Correggi per procedere.');
}
else if(uniqueArray(arr).length != $('.seq').length) {
console.log(uniqueArray(arr));
alert('Ci sono voci duplicate nella sequenza. Correggi per procedere.');
}
else if($('#dt_from').val()=='__/__/____ __:__') {
alert('Scegli data e ora di inizio validit\u00E0 per il workflow');
}
else if($('#dt_to').val()=='__/__/____ __:__') {
alert('Scegli data e ora di fine validit\u00E0 per il workflow');
}
else {
ajaxSubmit();
}
});
});
If thisUniqueArray(['1','2','','','3','4','1']);是用戶輸入它應該給我isUniqueArray(['1','2','','3','4']);這是錯誤的',因爲輸入是7項,輸出只有5(存在重複)。我想排序輸入,在isUniqueArray(['1','2','3','4','1'))中更改它。即5項 – 2015-02-09 15:49:38
這是一個驗證函數 - 根本不修改這些值。看來你想要一個功能,將排序,剝離空白_and_失敗,如果有重複? – 2015-02-09 15:56:03
是的,現在我檢查arr和arrUnique的長度......空白項目應該被跳過,因爲我可以發佈一個數組,甚至有一個值,兩個空,但我不能將這個選項添加到我的代碼 – 2015-02-09 15:58:24