我有<table>
动态生成的行(<tr>’s
)。
在每一行中,我都有一个特定的单元格(<td>
),其中我显示了一个文本框。在该文本框中,我添加了一个自定义data-roundingrule
属性,该属性包含一个特定值(在每一行中,data-roundingrule属性可能(或可能不)具有不同的值)。
以下是这些文本框可能的两个示例:
<input type=”text” id=”txt-1” name=”txt-1” data-roundingrule=”2”>
<input type=”text” id=”txt-2” name=”txt-2” data-roundingrule=”13”>
我的目标是在每个文本框上创建一个更改事件,以验证输入的值(由用户)是否是data-roundingrule
属性中存储的值的倍数。
如果用户输入的值是data-roundingrule
属性的倍数,那么很棒!保持原样......
如果用户输入的值不是data-roundingrule
属性的倍数,则查找/获取/获取将是data-roundingrule
属性的倍数的下一个最接近的数字。
以下是一个例子:
考虑到上述两个文本框,在文本框1中,用户输入值1.更改事件验证值1是否为数据舍入规则的倍数设置为2.由于情况不是这样,我需要更改用户输入的值并将其设置为2.
同样对于第二个文本框...假设用户在文本框中输入值4,则4不是13的倍数,因此我需要将用户的输入从4更改为13。
如果用户在第二个文本框中输入了值16,则16不是13的倍数,因此我需要将用户的输入从16更改为26(这是下一个倍数)。
希望这是有道理的......
真诚地,并提前感谢!
答案 0 :(得分:2)
你可以这样做:
$('input').change(function() {
var round = parseInt($(this).attr('data-roundingrule'), 10);
var value = parseInt($(this).val(), 10);
var remainder = value % round;
if(remainder != 0) {
$(this).val(value + round - remainder);
}
});
答案 1 :(得分:0)
添加onchange方法
<input type=”text” id=”txt-2” name=”txt-2” data-roundingrule=”13” onchange="roundUp(this)">
然后使用Jquery定义函数...
function roundUp(el)
{
var num = $(this).attr("data-roundingrule");
num = num * 1 // lazy coercion to numeric type
var val = $(this).attr(val);
val = val * 1;
if(val % num === 0)
{
//it's good
}
else
{
while(val % num !== 0)
{
val += 1;
}
}
}
你应该添加某种错误检查,但是......
答案 2 :(得分:0)
$('input').change(function () {
var rr = parseInt($(this).data('roundingrule'), 10);
if ($(this).val() % rr != 0) $(this).val(Math.ceil($(this).val() / rr) * rr);
});
<强> jsFiddle example 强>