JQuery验证-对所选ID使用rules方法,为什么元素上必须存在name属性?
我对这种行为有点困惑 如果我有以下JQuery:JQuery验证-对所选ID使用rules方法,为什么元素上必须存在name属性?,jquery,jquery-validate,name-attribute,Jquery,Jquery Validate,Name Attribute,我对这种行为有点困惑 如果我有以下JQuery: $('#form1').validate({ /* other validation */ }); $('#txt1').rules("add", { required: true, messages: { required: 'This is required!' } }); 和以下文本输入,具有id但没有名称属性: <input type="text" id="txt1"/> <input ty
$('#form1').validate({
/* other validation */
});
$('#txt1').rules("add",
{
required: true,
messages: { required: 'This is required!' }
});
和以下文本输入,具有id但没有名称属性:
<input type="text" id="txt1"/>
<input type="text" id="txt1" name="anything"/>
文本框上不会弹出所需的消息
但是,如果添加名称属性:
<input type="text" id="txt1"/>
<input type="text" id="txt1" name="anything"/>
它很好地验证了这一点
为什么呢?既然我在ID选择器上使用了,为什么它需要name属性来将规则关联到元素?谢谢你的洞察力 元素首先需要一个
name
属性,因为jQuery validate在内部使用该属性作为每个字段的键,其次,因为输入
元素上需要名称
属性,以确保页面验证为指定的DOCTYPE。如果要使用id应用规则,请像这样使用
$(function () {
var $field = $("#id_field").attr("name");
var $params = {debug:false, rules:{}, messages:{}};
$params['rules'][$field] = {"required": true, "rule": ["params"]};
$params['messages'][$field] = "error message";
$("#frm").validate($params);
});
谢谢你的解释!您可以在此进一步解释一下,这段代码如何允许验证器基于id属性查找元素?OP询问“为什么元素上必须存在name属性?”-因此,您不需要回答实际问题,而是通过编程方式查找
name
属性并将其复制到方法中。完全没有意义-如果您有名称
,请使用名称
。否则,您可以使用.rules()
方法通过id
分配规则,即使每个字段元素上唯一的名称仍然是此插件的强制要求。然而,OP想知道他是否可以完全避免使用name
属性,而这在这个插件中是不可能的。