【问题标题】:Conditional jQuery validation based on custom attribute基于自定义属性的条件 jQuery 验证
【发布时间】:2021-07-10 23:40:24
【问题描述】:

我想根据输入和按钮之间匹配的自定义数据属性有条件地启用/禁用按键更改。我只用一个输入解决了它,但似乎当我在组合中添加另一个输入时,按钮似乎没有启用。 此外,我有预感这是因为 .each() 但我无法确定。

Here's the CodePen I've tried and failed on

var validation = $('[data-validation]');
var validate;

validation.on("change keyup", function (e) {
  let validated = true;
  validation.each(function () {
    let value = this.value;
    validate = $(this).data('validation');
    
    if (value && value.trim() != "") {
      validated = false;
    } else {
      validated = true;
      return false;
    }
  });
  
  if (validated) {
    $('[data-validator=' + validate + ']').prop("disabled", true);
  } else {
    $('[data-validator=' + validate + ']').prop("disabled", false);
  }
});

【问题讨论】:

    标签: javascript jquery validation


    【解决方案1】:

    这里的关键是只为更改的输入运行验证代码。与您所拥有的相反,即为所有输入运行。

    要获取实际更改的输入,您可以利用传递给事件处理程序的事件对象的.target 属性。

    或者,如果您完全删除 validation.each(),它也可以工作。这是因为jQuerythis 的值设置为实际触发事件的DOM 元素(不是jQuery 包装的元素)。

    var validation = $("[data-validation]");
    var validate;
    
    validation.on("change keyup", function (e) {
      let validated = true;
      let value = this.value;
      validate = $(this).data("validation");
    
      if (value && value.trim() != "") {
        validated = false;
      } else {
        validated = true;
        return false;
      }
    
      if (validated) {
        $("[data-validator=" + validate + "]").prop("disabled", true);
      } else {
        $("[data-validator=" + validate + "]").prop("disabled", false);
      }
    });
    

    【讨论】:

    • 哦,我确实尝试过删除validation.each(),但由于某种原因它不起作用。我一定搞砸了别的东西。感谢您的解释和快速回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2014-05-18
    • 2011-09-09
    相关资源
    最近更新 更多