尽管所有的答案贴在技术上是正确的,我相信这个解决方案是既不maintenable也不扩展。
你很难依赖于静态的元素id。
想象如果您将来希望添加更多执行此类验证的td
s,您是否要跟踪新添加的行? 虽然在技术上你可以但在人类学上它的精神枯竭和这样的事情否认利用计算机和软件设计的目的 - 自动化。 有些东西可以让你做创造性的工作,并让计算机完成机械工作。
由于这个哲学原因,我相信这段代码是一个更好的解决方案。
HTML - 删除Ids并将this
表示当前元素(在此情况下为输入)作为函数的参数。
<table>
<tr>
<td><input type="text" required size="3" onChange="bottomAirF(this)"></td>
<td class="noborder"></td>
</tr>
</table>
JS - 使用DOM访问器来查找下一个td
和更新它的innerHTML
function bottomAirF(elem) {
var x, text;
x = +elem.value; // Prepended + sign will parse whatever follows to integer.
if (isNaN(x) || x < 33 || x > 40) {
text = "Temp Out of Tolerance";
} else {
text = " ";
}
elem.parentNode.nextElementSibling.innerHTML = text;
}
编辑:对于更新的要求
要添加新的验证和条件。
假设您有3个需要验证的文本框。每个文本框都有不同的验证参数。
首先应只接受值1和10
之间
其次应该只有11和33
之间接受值
第三应该只接受33和41
之间
值于是更新的代码将是, (该功能的名称将改为某种通用的,如
validate
)
请注意,input
元素上还有两个附加属性,即指定范围的和val-max
。
<table>
<tr>
<td><input type="text" required val-min="1" val-max="10" size="3" onChange="validate(this)"></td>
<td class="noborder"></td>
</tr>
<tr>
<td><input type="text" required val-min="11" val-max="33" size="3" onChange="validate(this)"></td>
<td class="noborder"></td>
</tr>
<tr>
<td><input type="text" required val-min="33" val-max="40" size="3" onChange="validate(this)"></td>
<td class="noborder"></td>
</tr>
</table>
JS代码
function validate(elem) {
var x, text;
x = +elem.value; // Prepended + sign will parse whatever follows to integer.
var min = elem.getAttribute('val-min');
var max = elem.getAttribute('val-max')
if (isNaN(x) || x < min || x > max) {
text = "Temp Out of Tolerance";
} else {
text = " ";
}
elem.parentNode.nextElementSibling.innerHTML = text;
}
Working Fiddle
有了这个js代码,通过你的解释的声音,我将能够使用一个功能适用于所有不同的输入字段(这将需要在这个范围内)?我问的原因是因为像你指出的那样,现在我不得不为每个输入字段创建一个新的函数。 – Dragonman86
准确地说,这就是这种方法的重点。请检查更新的答案。 :) – AdityaParab
@AdityaParad,非常感谢你,但是第一组代码对我正在尝试做的事情来说工作得很好。我仍然有大约四种不同的函数来编写代码,但是这比我之前编写的20多个单独的函数更好。这个答案不仅解决了我最初发布的问题,而且还解决了另一个问题,我试图弄清楚如何简化编码。再一次,谢谢 – Dragonman86