分配直接值的良好编程实践
Good programming practice to assign direct values
编辑:添加了 JSfiddle 以更好地演示
所以我不确定这是否是好的编程,但我有一个包含多个单元格的表,其中一些依赖于其他单元格(>、<等(我还有一个表格,其中的值也依赖于其他值。>
我正在使用 XSLT 从 XML.So 动态生成这些表/表单,具体取决于 XML,页面看起来会有所不同并且具有不同的数据。问题是我是否应该设计 XML,使其具有对它所依赖的各个元素的引用?这样,当我输入一个值时,我将检查输入的值是否满足依赖项的条件。在此 JsFiddle 中,单元格具有一个 data-valueLimits,该限制明确告知需要检查哪个单元格
<tbody><tr class="tableRow">
<td ><input type="Text" id="1102" style="text-align:center;" data-valuelimits="&
lt;=:1103"/></td>
<td><input type="Text" id="1103" style="text-align:center;" data-valuelimits="&
gt;=:1102"/></td>
</tr></tbody>
</table>
我觉得这有点黑客,因为我明确告诉它需要检查哪个元素。
我希望有一些更动态的东西,如果我可以单击任何元素并查看一个地方。
例如,如果我取消聚焦第 1 列第 1 行中的单元格,我将触发一个事件,该事件查找列标题中的信息,指出此列小于第 2 列。因此,我随后获取第 2 列第 1 行中的单元格,以检查第 1 列第 1 行中单元格中的值是否小于第 2 列第 1 行中的单元格。但是,这样做的问题是它们必须组合在一起,而元素可以在任何地方。在此 JsFiddle 中,data-valueLimits 位于标题中,我必须以编程方式获取信息,以确定基于该信息的哪一列以及单元格取消焦点位于哪一行才能获取要组合的值。这样我就不需要知道它是什么单元格,而是知道位置。
<thead><tr>
<th ><label data-valuelimits="<=:MaxNum" name="MinNum">Min Number</label></th>
<th class="dataTableHeader"><label data-valuelimits=">=:MinNum" name="MaxNum">Max
Number</label></th>
</tr></thead>
有谁知道将这两种方式结合起来的方法吗?
构建自定义校验和验证实际上非常简单。您可能可以基于现有的框架(例如jQuery Validify(进行构建,但是我想保持所有这些简单。
您可以对需要校验和的元素使用 data-checksum
属性,并使用事件委派捕获具有此属性的所有input[type="text"]
元素的每个blur
事件。在我的示例中,inputA + inputB
的校验和意味着该值需要分别等于名为 inputA
和inputB
的字段的总和。
注意:模糊在某些浏览器中不会冒泡,因此您可能无法使用事件委派。将事件侦听器添加到所有元素可能更安全。
例如
.HTML
<input name="inputA" type="text">
<input name="inputB" type="text">
<input name="inputC" type="text" data-checksum="inputA + inputB">
.JS
$(function () {
var spacesRx = /'s/g,
wordBoundaryRx = /'b/,
operatorsRx = /[+'-*'']/;
$(document).on('blur', 'input[type=text][data-checksum]', function (e) {
var $this = $(e.currentTarget),
//default operator
operator = '+',
//naive parsing of the checksum expression
parts = $this.data('checksum').replace(spacesRx, '').split(wordBoundaryRx),
//calculate the result of the checksum expression
result = parts.reduce(function (res, item) {
if (operatorsRx.test(item)) {
operator = item;
return res;
}
//evil eval to shorten code example
return eval('res' + operator + '=' + ($('input[type=text][name="' + item + '"]').val() || 0));
}, 0);
if (result !== parseInt($this.val(), 10)) {
console.warn('error, expecting ' + result + ' for field ' + $this.prop('name'));
}
});
});
注意:另请注意,验证配置不必存储在标记中。
编辑:
是的,这就是我的想法,但我觉得这很黑客,因为我在某种意义上是"硬编码"的东西,比如明确告诉 它输入 A 和输入 B。但如果这是我猜的唯一方法。
好吧,如果没有任何算法可用于根据正在验证的元素的唯一知识来确定规则,那么除了指定规则之外别无他法。除非你是查克·诺里斯...
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- jquery动画可以通过编程链接吗
- 一点javascript元编程&可链接的设置器
- 如何在jQuery中将函数的输出分配给变量
- 为集合分配大量的模型弹药
- onclick函数需要双击,因为类分配延迟
- Javascript 将变量分配给警报
- 将节点数据分配给另一个变量jstree
- 如何正确编程jQuery动画与平滑(导航栏)
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript变量分配-按类别
- 如何将内容分配给元素
- 为变量分配多个nodejs导出返回值时出现问题
- 分配直接值的良好编程实践
- Highcharts:动态地(以编程方式)分配轴名
- 删除缓存文件并以编程方式释放为其分配的内存
- 函数式编程和局部函数状态分配