jquery找到下一个/最近的另一个数字的多个数字

时间:2013-02-19 17:57:43

标签: javascript jquery

我有<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(这是下一个倍数)。

希望这是有道理的......

真诚地,并提前感谢!

3 个答案:

答案 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