你能否要求两个表单域与HTML5匹配?
有没有办法要求两个表单域中的条目匹配使用HTML5? 或者这仍然必须用JavaScript来完成? 例如,如果您有两个密码字段,并且要确保用户在每个字段中input了相同的数据,是否有一些属性或可以完成的其他编码来实现此目的?
我很确定它不存在。 这不应该用JS来实现。 为什么不用php / asp或其他服务器端语言来validation它们? 似乎更安全:)
编辑
几年后,纯HTML5validation仍然不能令人满意。 正如@Peteris所指出的,更好的方法是使用JavaScript来获得更好的用户体验,并进行服务器端validation,以确保用户数据按预期形成。
大多数框架都是这样devise的。 例如: AngularJS和Ruby on Rails
不完全使用HTML5validation,但有一点JavaScript可以解决这个问题,请按照下面的例子:
<p>Password:</p> <input name="password" required="required" type="password" id="password" /> <p>Confirm Password:</p> <input name="password_confirm" required="required" type="password" id="password_confirm" oninput="check(this)" /> <script language='javascript' type='text/javascript'> function check(input) { if (input.value != document.getElementById('password').value) { input.setCustomValidity('Password Must be Matching.'); } else { // input is valid -- reset the error message input.setCustomValidity(''); } } </script> <br /><br /> <input type="submit" />
你可以用正则expression式input模式 (检查浏览器的兼容性 )
<input id="password" name="password" type="password" pattern="^\S{6,}$" onchange="this.setCustomValidity(this.validity.patternMismatch ? 'Must have at least 6 characters' : ''); if(this.checkValidity()) form.password_two.pattern = this.value;" placeholder="Password" required> <input id="password_two" name="password_two" type="password" pattern="^\S{6,}$" onchange="this.setCustomValidity(this.validity.patternMismatch ? 'Please enter the same Password as above' : '');" placeholder="Verify Password" required>
一个简单的解决scheme与最小的JavaScript是使用HTML属性模式( 大多数现代浏览器支持)。 这通过将第二个字段的模式设置为第一个字段的值来工作。
不幸的是,你也需要逃避正则expression式,因为没有标准函数。
<form> <input type="text" oninput="form.confirm.pattern = escapeRegExp(this.value)"> <input name="confirm" pattern="" title="Fields must match" required> </form> <script> function escapeRegExp(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } </script>