如果我理解正确,当通过.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