我使用HTML5'模式'屬性和相應的JS測試了一些表單驗證。充分披露,如果這有什麼不同,我堅持使用IE 11。.each()循環中的JavaScript數組不添加新元素
到目前爲止,我已經能夠讓我的腳本循環並從HTML輸入中拉出模式,並將它們轉換爲.test()方法的RegExp。驗證部分似乎正在工作。
我想的形式輸入存儲到一個數組,例如:FORMDATA [fieldData,fieldData,fieldData]
...和它們的驗證狀態存儲到另一個數組,例如:validationStates [真,假,真]
...,然後啓用提交按鈕一次。每()validationState是真(而不是在代碼還)。
我的問題是,我的數組只有1個元素長 - 新值不是.push()編輯給他們。控制檯一直報告每個數組都是.length 1,就好像它在循環的每次傳遞期間被覆蓋一樣(我也嘗試了一種非破壞性的.splice(),正如你所看到的那樣)。我究竟做錯了什麼?
$("input").change(function() {
console.clear();
$("[required]").each(function(index) { // find all required form fields
var fieldData, regex; // init variables
var formData = []; // init array for form input data
var validationStates = []; // init array for validation states
fieldData = $(this).val(); // get form values and store
regex = new RegExp($(this).attr("pattern")); // pull regex from pattern(s)
formData.splice(index, 0, fieldData); // store the field inputs in an array
validationStates.push((regex.test(fieldData)));
console.log(formData);
console.log(index);
console.log(validationStates);
});
});
.form-control, .btn {
margin-top: 10px;
}
input:invalid, textarea:invalid {
border: 1px dotted #F33 !important;
color: #E33 !important;
}
input:valid, textarea:valid {
border: 1px dotted #2C8 !important;
color: #2C8;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="validated_form">
<div class="container">
<div class="row">
<div class="col-xs-6">
<input class="form-control" id="name" pattern="^[^\s][a-zA-Z\s-.]*$" placeholder="name" required="" title="only letters and '-'" type="text" />
</div>
<div class="col-xs-6">
<input class="form-control" id="time" pattern="^([0-1]?[0-9]|2[0-3]):[0-5][0-9]" placeholder="time (HH:mm)" required="" title="24H time in HH:mm or H:mm format" type="text" />
</div>
</div>
<div class="row">
<div class="col-xs-12">
<input class="form-control" id="pattern" pattern="^[^<>\s].{5,}$" placeholder="HTML5 pattern matching test (a-z only, more than 5 characters)" required="" title="must be more than 5 characters" type="text" />
</div>
</div>
<div class="row">
<div class="col-xs-offset-4 col-xs-4">
<button class="btn btn-md btn-block btn-info disabled" disabled="true" id="sub" type="submit" value="SUBMIT">Submit Form</button>
</div>
</div>
</div>
</form>
實際上,它應該在.change方法之上,否則每次輸入更改時它都會被覆蓋。 –
這是什麼,他很想編輯:好吧不,你是對的...沒有閱讀完整的代碼...編輯答案 –
謝謝你們兩個!我把這兩個數組聲明都移到了$(「input」).change()之上並且處理了它 - 現在我只需要在按鈕啓用部分上工作。 – JRiggles