将嵌套较深的元素传递给JQuery中的函数
我有以下表格:将嵌套较深的元素传递给JQuery中的函数,jquery,Jquery,我有以下表格: <form action="contact.php" method="post" id="contactform"> <ol> <li> <label for="name">First Name * </label> <input id="name" name="name" class="text" />
<form action="contact.php" method="post" id="contactform">
<ol>
<li>
<label for="name">First Name * </label>
<input id="name" name="name" class="text" />
</li>
<li>
<label for="email">Your email * </label>
<input id="email" name="email" class="text" />
</li>
<li>
<label for="company">Company</label>
<input id="company" name="company" class="text" />
</li>
<li>
<label for="subject">Subject</label>
<input id="subject" name="subject" class="text" />
</li>
<li>
<label for="message">Message * </label>
<textarea id="message" name="message" rows="6" cols="50"></textarea>
</li>
<li class="buttons">
<input type="image" name="imageField" id="imageField" src="images/send.gif" />
</li>
</ol>
</form>
这个脚本(用jquery编写)用于拦截提交事件
jQuery(document).ready(function(){
$('#contactform').submit(function(){
...
});
});
问题是,在最后一个脚本中,我想调用validateRequired
传递每个必需的输入/文本区域(即:name
、email
和message
)作为第一个参数
我试着这样做:
validateRequired($('#name'));
但它不起作用
我怎样才能做到这一点呢?我首先要为每个必需的输入添加一个类
<li>
<label for="subject">Subject</label>
<input id="subject" name="subject" class="text required" />
</li>
虽然这会发出诸如“subject is required”之类的一般警报,但希望您可以使用此迭代器模式实现更好的用户体验,可能是通过使用不同的背景颜色突出显示所需的文本字段
jQuery(document).ready(function(){
$('#contactform').submit(function(){
$('#contactform input.required').each(function(){
this.addClass('error');
alert('The fields highlighted in red are required');
});
});
});
我受到Jeff Vyduna解决方案的启发,但我自己解决了它
$('#contactform').submit(function(){
var submit = true;
$('#contactform *.required').each(function(){
if(!validateRequired(this, this.id + ' is required'))
{
submit = false;
return false;
}
});
return submit;
});
显然,输入字段(包括
textarea
)必须是必需的
,第一种解决方案部分有效。我不得不将this.attr('name')
更改为this.id
。此外,它不会验证消息
,因为它是文本区域
。还有什么提示吗?嗯,当我发现这个时,我开始自己动手:
jQuery(document).ready(function(){
$('#contactform').submit(function(){
$('#contactform input.required').each(function(){
this.addClass('error');
alert('The fields highlighted in red are required');
});
});
});
$('#contactform').submit(function(){
var submit = true;
$('#contactform *.required').each(function(){
if(!validateRequired(this, this.id + ' is required'))
{
submit = false;
return false;
}
});
return submit;
});