变更时的jQuery无法与动态变更一起使用

时间:2018-10-09 18:07:19

标签: javascript jquery

亲爱的我在下面的代码中限制输入最大值

如果用户尝试手动更改它,则效果很好

但是如果更改是通过jquery动态发生的,则它不起作用

$( "#materials" ).on('change','select',function(e){


    var value = $(this).val();

    if ((value !== '') && (value.indexOf('.') === -1)) {

        $(this).val(Math.max(Math.min(value, 3), 0)); // it's set the input value t 3 as max value
    }

});

$( "#materials" ).val(300); // it's changing the value alawys

因此,最后一行将输入更改为300,但是如果用户不能将其设置为3以上

那么,即使有动态更改,我怎么也不能拒绝任何值的更改

2 个答案:

答案 0 :(得分:1)

您应在设置值$( "#materials" ).val(300).trigger('change');

时明确触发更改事件。

答案 1 :(得分:-1)

我可能是不正确的,但是我不相信.val()会触发“更改”事件(保留给用户交互)。

您可能需要做的就是将验证器功能移至setInterval()上,如下所示:

setInterval(() => {
  let input = $("#materials");
  let value = input.val();
  if ((value !== '') && value.indexOf('.') === -1) {
    input.val(Math.max(Math.min(value, 3), 0));
  }
}, 0);

这是导致验证逻辑在每个事件循环中对ID为“ materials”的所有元素运行一次。