0

我有一个<table>动态生成的行(<tr>’s)。

在每一行中,我都有一个特定的单元格 ( <td>),我在其中显示一个文本框。在该文本框中,我添加了一个data-roundingrule包含特定值的自定义属性(在每一行中,data-roundingrule 属性可能(或可能没有)具有不同的值)。

以下是这些文本框的两个示例:

<input type=”text” id=”txt-1” name=”txt-1” data-roundingrule=”2”&gt;
<input type=”text” id=”txt-2” name=”txt-2” data-roundingrule=”13”&gt;

我的目标是在每个文本框上创建一个更改事件,以验证输入的值(由用户)是否是存储在data-roundingrule属性中的值的倍数。

如果用户输入的值是data-roundingrule属性的倍数,那就太好了!保持原样……</p>

如果用户输入的值不是data-roundingrule属性的倍数,则查找/获取/获取下一个最接近的数字,该数字将是data-roundingrule属性的倍数。

这是一个例子:

考虑上面两个文本框,在文本框1中,用户输入值1。change事件验证值1是否是data-roundingrule设置为2的倍数。既然不是这样,那我需要改变值由用户输入并将其设置为 2。

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

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

希望这是有道理的……</p>

真诚的,并提前感谢!

4

3 回答 3

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);
    }
});
于 2013-02-19T18:13:06.177 回答
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;
    }
  }  
}

不过,您可能应该添加某种错误检查...

于 2013-02-19T18:13:55.210 回答
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 示例

于 2013-02-19T18:17:15.270 回答