我在一个页面上有多个表单,这些表单根据表单的ID而不同。 ID的附加是_0,_1,_2等(由rails创建的索引值每个都循环)。
我正在尝试验证这些表单,但是为了保持我的代码DRY,我希望表单选择器是动态的。我需要以某种方式获取表单的ID值(“_ 0”)并将其添加到jQuery选择器。
这个Fiddle给出了我现在如何解决问题的例子。 validation()块内部的代码在jQuery函数之间是相同的。我需要将selector变量设置为:
$("new_loan_question_answer_"+i)
我不确定如何将HTML表单的_0或_1传递给jQuery函数。
表单html
<div class="form">
<p>Question #1 text</p>
<form id="question_response_0">
<input type="text" name="response"></input>
<input type="submit">
</form>
</div>
<div class="form">
<p>Question #2 text</p>
<form id="question_response_1">
<input type="text" name="response"></input>
<input type="submit">
</form>
</div>
jquery的
$(function () {
$("#question_response_0").validate({
rules: {
"response": {
required: true
}
},
messages: {
"response": {
required: 'This field is required'
}
},
errorPlacement: function (error, element) {
error.insertAfter(element.parent());
}
});
});
$(function () {
$("#question_response_1").validate({
rules: {
"response": {
required: true
}
},
messages: {
"response": {
required: 'This field is required'
}
},
errorPlacement: function (error, element) {
error.insertAfter(element.parent());
}
});
});
答案 0 :(得分:0)
例如,查看http://api.jquery.com/submit/。
如果您使用事件处理程序来调用函数,那么事件可能包含您需要的信息(提交表单的ID)。
有关事件对象的信息,请访问:http://api.jquery.com/category/events/event-object/
答案 1 :(得分:0)
可以使用标记中已有的类,也可以添加类来形成标记:
$('div.form form').validate({/* options*/}) ;
这将包括与选择器匹配的所有表单,每个表单都有自己的验证实例
答案 2 :(得分:0)
不要为增量id
属性而烦恼。维护并导致代码干扰的问题变得很痛苦。这种事情完全发明了什么类:
<div class="form">
<p>Question #1 text</p>
<form class="question_response"> <!-- < use a common class on the form -->
<input type="text" name="response"></input>
<input type="submit">
</form>
</div>
<div class="form">
<p>Question #2 text</p>
<form class="question_response"> <!-- < use a common class on the form -->
<input type="text" name="response"></input>
<input type="submit">
</form>
</div>
现在您只需要将验证附加到.question_response
类。不幸的是,当在包含多个表单元素的选择器上实例化时,似乎在验证插件中错误突出显示错误(可能还有其他功能),因此您需要依次遍历每个表单:
$(function () {
$('.question_response').each(function() {
$(this).validate({
rules: {
"response": {
required: true
}
},
messages: {
"response": {
required: 'This field is required'
}
},
errorPlacement: function (error, element) {
error.insertAfter(element.parent());
}
});
});
});