【发布时间】:2015-01-22 15:34:27
【问题描述】:
我在一个页面上有多个表单,这些表单根据表单的 ID 有所不同。 ID 的不同之处在于附加的 _0、_1、_2 等(由 rails 每个 do 循环创建的索引值)。
我正在尝试验证这些表单,但是为了保持我的代码干燥,我希望表单选择器是动态的。我需要以某种方式获取表单的 ID 值(“_0”)并将其添加到 jQuery 选择器中。
Fiddle 提供了我现在如何解决问题的示例。 jQuery 函数之间的validation() 块内的代码是相同的。我需要将选择器变量设置为这样的:
$("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());
}
});
});
【问题讨论】:
-
你最好使用类或任何横向选择器来绑定事件,例如:
$('.form form').validate(...); -
有人需要制作一张蝙蝠侠拍打罗宾的图像,罗宾问“我如何使用 JQuery 进行 ID 选择”,蝙蝠侠用“停止过度使用 IDS!”打断。仅当整个世界中只有一种此类事物时才使用 ID。
-
每个表单的所有规则都相同吗?如果是这样,您可以使用以选择器开头的 id:
jQuery("form[id^='question_response']" )但正如其他人所说,我会添加一个类 -
@Katana314 我试过在这种情况下使用类。似乎 jQuery validation() 需要每个表单的 ID 才能知道将错误 HTML 代码附加到哪个表单。查看使用类作为选择器的更新小提琴:jsfiddle.net/7w6huhp9/4
-
@Questifer Darn;如果 JQuery 短暂地放弃其“对多个元素进行操作”的规则,那将非常令人困惑。 Pete 说得对,它仍然可以通过类工作,但是您需要通过函数内部的适当变量引用来跟踪表单,而不是选择 ID。
标签: javascript jquery html forms