javascript - 为什么 jQuery Validate "remote:"验证需要一个函数来设置数据值?

标签 javascript jquery jquery-validate

在 jQuery Validate 文档中,它展示了使用远程验证调用将附加值传递到服务器端验证脚本/资源的示例:

http://docs.jquery.com/Plugins/Validation/Methods/remote#code

这是示例代码:

$("#myform").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "check-email.php",
        type: "post",
        data: {
          username: function() {
            return $("#username").val();
          }
        }
      }
    }
  }
});

为什么我需要使用函数来设置用户名数据参数?:

username: function() {
  return $("#username").val();
}

而不仅仅是:

username: $("#username").val()

我已经尝试了这两种方法,果然第二种方法没有分配 username: 值。

我确实在remote方法函数中的jQuery Validate代码中设置了一个断点:

remote: function(value, element, param) {
    ...
}

尝试了解这里发生的事情,但我真的一无所知。

最佳答案

jQuery.fn.validate(config)用于设置验证规则,而不是实际执行验证。整个 {rules:/* */} 对象会在发生这种情况时准确评估。


如果包含

$('#username').val()

在规则对象中,将立即计算该表达式,并保存此时元素的值。


如果你通过了

function() { 
  return $('#username').val(); 
}

作为值,当 remote validator 时将评估此函数当jQuery.param时被调用并进行AJAX调用。将 data 属性展平为字符串。

请注意,此验证器将其整个配置对象合并到它进行的每个 AJAX 调用中,因此普通 ajax 设置对象中可接受的所有其他选项都可以通过这种方式设置,而不仅仅是 data

关于javascript - 为什么 jQuery Validate "remote:"验证需要一个函数来设置数据值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781856/

相关文章:

单击按钮期间 jQuery 验证不起作用

javascript - 切片链接 JavaScript

javascript - x 秒后关闭 Twitter Bootbox

javascript - 所需文件上传进度条

jquery - 可排序,可选择文本

javascript - Jquery:使用选项卡在菜单中导航

asp.net-mvc-3 - Ajax 请求后手动绑定(bind) JQuery 验证

javascript - 手动给元素添加 ng animate

javascript - 如何根据数据库值显示设置访问权限和显示/隐藏div

javascript - 属性列表后缺少 jquery 验证 }