如果我理解正確,當通過.submit()
(而不是通過點擊<input type="submit" />
手動提交)計算提交HTML5表單時,瀏覽器將不會檢查具有required
屬性的表單字段。爲什麼兩種不同的HTML5表單計算提交方法返回不同的行爲?
但是。如果通過.click()
計算點擊現有的<input type="submit" />
,則檢查具有required
屬性的表單字段是檢查。
所以......我討厭問明顯,但爲什麼在首位.submit()
的限制,如果在一個不可見<input type="submit" />
檢查required
反正計算.click()
?這裏的想法是什麼?
例子:
var submitButtonForm = document.getElementsByClassName('submit-button-form')[0];
var submitButton = submitButtonForm.getElementsByClassName('submit-button')[0];
submitButton.addEventListener('click', function(){submitButtonForm.submit();}, false);
submitButtonForm.addEventListener('submit', function(){window.alert('Required attribute did not work and onsubmit event did not work either');}, false);
var clickButtonForm = document.getElementsByClassName('click-button-form')[0];
var clickButton = clickButtonForm.getElementsByClassName('click-button')[0];
var realSubmit = clickButtonForm.querySelector('input[type="submit"]');
clickButton.addEventListener('click', function(){realSubmit.click();}, false);
form {
display: inline-block;
float: left;
width: 180px;
height: 180px;
font-size: 16px;
line-height: 24px;
font-family: arial, helvetica, sans-serif;
text-align: center;
background-color: rgb(227, 227, 255);
border: 2px solid rgb(255, 255, 255);
}
label {
display: block;
margin-bottom: 24px;
font-size: 12px;
line-height: 18px;
text-transform: uppercase;
}
.click-button-form input[type="submit"] {
display: none;
}
<form class="real-submit-form" action="#">
<h2>Form 1</h2>
<label>Required Field:
<input type="text" required />
</label>
<input type="submit" value="I am a real Submit" />
</form>
<form class="click-button-form" action="#">
<h2>Form 2</h2>
<label>Required Field:
<input type="text" required />
</label>
<input type="button" class="click-button" value="I am a Button [ .click() ]" />
<input type="submit" value="I am also a real Submit... (but hidden!)" />
</form>
<form class="submit-button-form" action="/">
<h2>Form 3</h2>
<label>Required Field:
<input type="text" required />
</label>
<input type="button" class="submit-button" value="I am a Button [ .submit() ]" />
</form>
我認爲這主要是基於意見的,因爲有很多關於javascript如何與DOM交互的歷史,並不是所有的都可以合理解釋。儘管在其他實現中存在不同的行爲,但在很大程度上,基於特定實現包含了特徵。 – RobG
是的,這在歷史上是正確的。你是對的。但HTML5的確是明確地打算成爲從九十年代和大多數年代的混亂中向前邁出的一步。 atttribute'required'是HTML5的一項創新。 – Rounin
@Rounin您是否考慮過在DOM或HTML規範中提交問題?或瀏覽器實現?預期的結果是什麼? – guest271314