2013-02-19 44 views
0

我有一个<table>动态生成的行(<tr>’s)。jquery查找另一个号码的下一个/最接近的多个号码

在每一行中,我都有一个特定的单元格(<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是数据roundingrule组的至2的倍数由于1.改变事件的值验证事实并非如此,那么我需要更改用户输入的值并将其设置为2.

同样,对于第二个文本框......假设用户在文本框中输入了值4,则4不是13,所以我需要将用户的输入从4更改为13.

如果用户在secon中输入了值16 D文本框中,16不是13的倍数,所以我需要将用户的输入从16更改为26(这是下一个倍数)。

希望这是有道理的...

真诚地提前致谢!

+0

到目前为止,我有这调用另一个函数的变化情况。除了data-roundingrule属性中的值之外,该其他函数还获取该特定文本框的用户输入。有了这个,我可以计算出用户的输入是多重的,但是我没有想到的是如何找到下一个/最近的倍数,以防用户的输入不是倍数。 – Vlince 2013-02-19 18:15:13

回答

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

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); 
    } 
}); 
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; 
    } 
    } 
} 

你应该可能会添加一些错误检查,虽然...

相关问题