我在将 jQuery 添加到一些现有代码时遇到问题,请帮忙。
我们有相同的表单(相同的表单名称,相同的字段,相同的提交按钮,没有为表单定义的 id 或类)在页面上出现了几次,现在我需要使用 jQuery 验证表单,而不传递表单对象,jQuery 可以判断提交的是哪个表单吗?
谢谢大家的回复,问题解决了:-)
我在将 jQuery 添加到一些现有代码时遇到问题,请帮忙。
我们有相同的表单(相同的表单名称,相同的字段,相同的提交按钮,没有为表单定义的 id 或类)在页面上出现了几次,现在我需要使用 jQuery 验证表单,而不传递表单对象,jQuery 可以判断提交的是哪个表单吗?
谢谢大家的回复,问题解决了:-)
从您的问题评论看来,您可能需要指定表单的上下文以及您的选择器:
$('form').submit(function() {
var form = $(this);
var myInputValue = $("input[name='myinput']", form).val();
// myInputValue is now the value of the myinput control that is
// within the submitted form
});
请注意,jquery 函数采用可选的第二个参数,即选择的上下文。这应该可以帮助您仅在提交的表单中找到输入元素。
在此处查看文档:
http://api.jquery.com/jQuery/#expressioncontext
@NiftyDude 的回答遇到了同样的问题,尽管他没有专门使用 jquery 来获取当前提交表单的子级。
您是否将#id 或.class 附加到<form>
标签以选择它并不重要。
试试这个:
$('form').submit(function () {
//put your ajax submission code here...
});
$("form[name='IDENTIFIER']")
如果您在单个页面上有多个表单以针对特定表单,这很有用
$('form').submit(function(e) {
// $(this) refers to the current form being submitted
// if you need to, for example iterate over all the inputs
var inputs = $(this)[0].getElementsByTagName('input'); // array of inputs
for(var i = 0; i < inputs.length; i++) { inputs[i].value; }
// this is important to avoid recursive submit
$(this)[0].submit();
return false;
});
$('form').submit(function(){
var form = $(this);
var inputs = $('input', this);
var isValid = true;
//do validation on the inputs of the form submitted.
if (isValid) {
//do something
}
return false;
});
或者,您可以捕获提交输入操作(这是我喜欢做的):
$('input[type="submit"]').click(function(event){
event.preventDefault();
var form = $(this).nearest('form');
var inputs = $('input', form).not(this);
var isValid = true;
//validate inputs
if (isValid) form.submit();
});
请注意,isValid = true
根据您的代码,可能不需要。如果您的任何元素未通过验证并且表单提交将无法继续,则可以将其设置为 false。如果您正在使用为您执行此操作的验证库并提交表单(如果有效),则不需要它。
一些验证器为每个失败的项目设置一个无效的类,您可以检查表单中是否存在具有该类的输入来确定是否应该提交表单。