form提交時隱藏input發生的錯誤
問題描述在form表單提交的時候,有些input標籤被隱藏,表單驗證過程中會出現An invalid form control with name='' is not focusable
的錯誤
雖然我遇到的問題是我的input標籤根本沒有required屬性,但是在該標籤隱藏之前,(我的是使用tab欄切換)我輸入了錯誤的格式,再隱藏,這時候他其實是錯誤的,會被form表單同樣去驗證,但是由於它被隱藏,瀏覽器取得不到焦點就會報錯。
解決方法隱藏之前將該input的value值設為空即可。我的input上面沒有使用required屬性。
如果input含有display:none和required屬性,也會產生該錯誤
產生原因Chrome希望專注於需要但仍為空的控件,以便可以彈出訊息請填寫此欄位。但是,如果控件在Chrome想要彈出訊息的時候隱藏,即在提交表單時,Chrome無法關注該控件,因為它是隱藏的,因此表單不會提交。
解決方法如下1.隱藏時,將required屬性刪除
selector.removeAttribute(required)
2.沒有使用required的話,或許是因為button按鈕,類型未設定造成。設定<button type=button>
3.form表單不驗證,即新增novalidate屬性。 (不是最終解決辦法)<form novalidate></form>
4.既然是因為使用了display:none造成,同樣的visibility: hidden 也會造成問題,那就不使用。透過可以設定css樣式opacity: 0;
5.停用此表單控制項。 disabled 這是因為通常如果你隱藏了表單控件,那是因為你不關心它的價值。所以這個表單控制項名稱值對在提交表單時不會被傳送。
$(body).on(submit, .myForm, function(evt) {// Disable things that we don't want to validate.$([input:hidden, textarea:hidden, select:hidden]).attr(disabled , true);// If HTML5 Validation is available let it run. Otherwise prevent default.if (this.el.checkValidity && !this.el.checkValidity()) { // Re-enable things that we previously disabled. $([input:hidden, textarea:hidden, select:hidden]).attr( disabled, false); return true;}evt.preventDefault();// Re-enable things that we previously disabled.$([input:hidden, textarea:hidden, select:hidden]).attr(disabled, false);// Whatever other form processing stuff goes here.});總結
以上所述是小編給大家介紹的h5的input的required使用中遇到的問題及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網站的支持!