【问题标题】:jQuery settings for form validation用于表单验证的 jQuery 设置
【发布时间】:2015-07-31 00:42:29
【问题描述】:

我正在构建一个基本的 jQuery 表单验证器。下面的代码只是为了验证名称。我有几个功能来验证邮件、密码、信用卡、日期等。我希望用户能够轻松地编辑错误消息和类。假设用户想要更改类“错误”或“成功”的名称。现在,用户需要在代码中显示“错误”或“成功”的所有位置进行搜索和替换。

有没有办法在代码顶部使用数组或对象来编辑每个 if 语句的错误消息,并应用类?

类似于此处显示的内容:http://learn.jquery.com/plugins/basic-plugin-creation/#accepting-options(但位于代码顶部,函数外部)。或者我可以使用相同的方法但像这样输入(在函数之外,在文件顶部)?

var settings = $.extend({
  color: "#556b2f",
  errorClass: "error"
}, options );

我还希望用户能够将 ID 和类直接添加到表单元素中,并在“必需”设置中键入“true”,这样表单元素就会是必需的。有什么好办法吗?

var name = $("[data-name]"); 
var nameMsg = $("#nameMsg");

name.on("blur", function() { $(this).validateName() });

$.fn.validateName = function() { 
  if(name.val().length < 5) { 
      name.removeClass("success") 
          .addClass("error"); 

      nameMsg.removeClass("success") 
             .addClass("error") 
             .text("Not that short, at least 5 characters.");

      return false; 
  } else { 
      name.removeClass("error") 
          .addClass("success"); 

      nameMsg.removeClass("error") 
             .addClass("success")
             .html("Correct");

      return true;
  }
}

解决方案

var defaults = {
    errorClass: "error",
    successClass: "success",
    successMessage: "<i class='fa fa-check-circle'></i>",
    errorMessageName: "Not that short, at least 5 characters.",
};

var settings = $.extend({}, defaults);

特别感谢 Martin Adámek 的帮助!

【问题讨论】:

    标签: javascript jquery validation settings


    【解决方案1】:

    $.extend 只是创建与两个参数的值合并的新对象,您可以使用它来扩展用户给定的默认选项对象(任何您想要的地方)。

    我不确定我是否理解正确,这是你想要的吗?

    var defaults = { // maybe you do not need extend at all? 
      errorClass: "error",
      successClass: "success",
      messageError: "Not that short, at least 5 characters.",
      messageCorrect: "Correct"
    };
    
    var name = $("[data-name]"); 
    var nameMsg = $("#nameMsg");
    
    name.on("blur", function() { $(this).validateName() });
    
    $.fn.validateName = function() { 
      var userOpts = {...}; // you can store it eg in data attribute on the element
      // extend options with user given values
      options = $.extend(defauts, userOpts);
    
      if(name.val().length < 5) { 
          name.removeClass(options.successClass) 
              .addClass(options.errorClass); 
    
          nameMsg.removeClass(options.successClass) 
                 .addClass(options.errorClass) 
                 .text(options.messageError);
    
          return false; 
      } else { 
          name.removeClass(options.errorClass) 
              .addClass(options.successClass); 
    
          nameMsg.removeClass(options.errorClass) 
                 .addClass(options.successClass)
                 .html(options.messageCorrect);
    
          return true;
      }
    }
    

    用户给定的选项将存储为 JSON 字符串(以允许与默认选项合并),因此您需要首先调用 JSON.parse()。

    编辑:

    数据属性中的选项 JSON 对象示例:

    HTML:

    &lt;input type="text" data-options='{"messageCorrect": "Bingo! That is the right choice!", "errorClass": "my-error-class"}' ...&gt;

    然后在$.fn.validateName() 你会做的很简单:

    var userOpts = JSON.parse($(this).data('options'));

    【讨论】:

    • 所以我不能通过:var defaults = $.extend({}, options);?
    • 那就等于var defaults = options;
    • 也许我只是错过了你的意思,你能解决你的问题吗?
    • 我没有任何问题,只是想知道我该怎么做你描述的。例如,拥有一个设置对象并使用 options.messageCorrect 定义设置。我不太明白您对“首先需要调用 JSON.parse() ”的看法。
    • 我会把它添加到我的答案中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多