我刚开始学习jQuery并且已经开始喜欢它了,但是我的技能还不足以解决这个可能是我工作的简单问题:我有3个不同的表单,输入字段后紧跟提交按钮:
如果文本输入字段或提交按钮前的textarea为空,我想阻止表单提交。我从jQuery Ninja book:
中偷了一个片段$(function() {
$(':submit').click(function(e) {
$(':text').each(function() {
if ($(this).val().length == 0) {
$(this).css('border', '2px solid red');
}
});
e.preventDefault();
});
});
但它存在以下问题:
$(':text').each()
不适用于它preventDefault()
移到“if”下prev()
代替each()
更新
我试过了:
$(function() {
$(':submit').click(function(e) {
$(this).prev(function() {
if ($(this).val().length < 2) {
// would be good to clear border for
// each text and textarea here...
$(this).css('border', '2px solid red');
e.preventDefault();
}
});
});
});
但不幸的是得到2个警告:
Warning: Unexpected token in attribute selector: '!'.
Warning: Unknown pseudo-class or pseudo-element 'submit'.
并且不会出现红色边框,单击按钮时会提交表单。
我也试过了:
$(function() {
$('form').submit(function(e) {
$(':text, textarea').each(function() {
if ($(this).val().length < 2) {
$(this).css('border', '2px solid red');
e.preventDefault();
}
});
});
});
但表单永远不会提交,所有3个文本字段都会变为红色而不只是一个。
答案 0 :(得分:4)
<script type="text/javascript" src="/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(function() {
$(':submit').click(function(e) {
$(':text, textarea').each(function() {
if ($(this).val().length == 0) {
$(this).css('border', '2px solid red');
e.preventDefault();
}
});
});
});
</script>
你可能可以使用.each():)
答案 1 :(得分:3)
点击代码并输入提交按钮
$(":input").bind("click keypress", function (evt) {
var keyCode = evt.which || evt.keyCode;
var sender = evt.target;
if (keyCode == 13 || sender.type == "submit") {
evt.preventDefault();
//add your validations here
}
并提交表格。
答案 2 :(得分:1)
(':text') is equivalent to $('[type=text]')
所以它不包括textarea。更改为$(':text, textarea')
。不,prev
不会遍历集合,each
会。 (prev
选择当前元素的上一个兄弟)
看看http://bassistance.de/jquery-plugins/jquery-plugin-validation/,这是一个很棒的验证插件。