或者,是否可以使用html5验证另一个字段的值?
一个常见的例子是选择日期范围,其中“from”日期应小于或等于“to”日期。以下将描述值之间的期望关系,如果只能在语法中使用元素引用:
<input type="date" name="from" max="to"> //todo: populate with ~to.value
<input type="date" name="to" min="from"> //todo: populate with ~from.value
答案 0 :(得分:3)
此处,Web Components非常有用,但尚未在所有浏览器中完全支持它们。
我们的想法是创建一个简单的html元素,其中包含两个子元素(from和to),如下所示:
<div id="fromToDate">
<div></div>
<div></div>
</div>
然后创建一个模板,该模板定义了日期选择器的外观:
<template id="fromToDateTemplate">
<label for="fromDate">from</label>
<input type="date" class="fromDate" select=":first" required="" />
<label for="toDate">to</label>
<input type="date" class="toDate" select=":last" required="" />
</template>
select参数定义,其中值取自第一个输入字段从“#fromToDate”获取第一个div。
最后我们必须填充“影子根”并定义逻辑:
var shadow = document.querySelector('#fromToDate').webkitCreateShadowRoot(),
template = document.querySelector('#fromToDateTemplate');
shadow.appendChild(template.content);
shadow.querySelector(".fromDate").addEventListener("change", function (e) {
var to = this.value;
shadow.querySelector(".toDate").setAttribute("min", this.value);
});
template.remove();
最后渲染了两个输入字段,在第一个日期选择器中选择日期时,第二个日期选择器无法选择任何较低的数据。
Fiddler示例:http://jsfiddle.net/cMS9A/
优点:
缺点:
未来阅读:
答案 1 :(得分:2)
可以使用html5验证机制和一些javascript动态更新min
/ max
属性:
//in this case a single input restriction is sufficient to validate the form:
$('#from, #to').on('change', function(){
$('#to').attr('min', $('#from').val());
});
Fiddled。如果日期选择器的浏览器实现遵循范围限制(通过禁用所需范围之外的日期),min
和max
都可以应用于相应字段以增强UX。
答案 2 :(得分:0)
如果你想避免某人黑客攻击/崩溃网站的问题 - 用以下方法验证输入数据:
这是保护您和您的网站的唯一(至少第二点)方法。
答案 3 :(得分:0)
答案 4 :(得分:-1)
我很担心,如何根据其他输入值验证输入值是不可能的。只有好老的javascript。
但也许您可以使用<input type="range" …>
并设置一些最小步骤(1天/ 1小时/ ...)。然后,您可以使用同名属性的min
和max
值。