2012-10-25 109 views
0

我的网站上有许多不同的表单。我想使用jQuery:防止字段为空时提交并显示错误消息

  • 显示错误消息如果任何文本字段都是空白
  • 突出显示与CSS的空白字段
  • 防止提交,直到用户将其填充表单的

所有不同的表单链接到同一个jquery脚本,所以我必须确保我的jquery不会对任何特定表单进行任何引用(否则,我将不得不为每个表单编写不同的脚本) 。

我认为这样做将是通过输入字段的each function循环,以检查它们是否空白,然后用event.preventDefault();从提交停止形式和addClass突出领域的最佳途径。

每个函数都能正常工作,但preventdefault/addclass似乎不起作用。我不知道我做错了什么。这里是我的代码:(JSFiddle版)

$(document).ready(function() { 

$('.names').submit(function(){ 
      $('.names input[type=text]').each(function(n,element){ 
      if ($(element).val()=='') { 
       event.preventDefault(); 
       alert('Some fields are blank (highlighted in red). Please fill them in'); 
       ($element).addClass("error"); 
       return false; 
      } 
      }); 
      return true; 
     }); 

}); 

我怎样才能得到它的工作?也可以将错误类应用于输入字段的父代<p>标记,而不是字段本身?

+0

几乎你所做的一切都可以用jQuery.validate插件完成,为什么要重新发明轮子? – Barmar

回答

1

event未定义。抓住你的提交回调的参数上调用了preventDefault:

$(document).ready(function() { 
    $('.names').submit(function (e) { 
     $(this).find('input[type=text]').each(function (n, element) { 
      if ($(element).val() == '') { 
       e.preventDefault(); 
       alert('Some fields are blank (highlighted in red). Please fill them in'); 
       $(element).parent().addClass("error"); 

       return false; 
      } 
     }); 

     return true; 
    }); 
}); 

需要注意的是:

  1. ($element)也是不确定的,你的意思是$(element)
  2. 要将错误类别添加到父级,请使用$(element).parent()
  3. 如果您有多个表单,这将无法正常工作。使用$(this).find('input[...]')而不是$('.names input[...]')。这样,你只验证你提交的表单。
  4. 这里是working fiddle
+0

你可以做以下'if(!$(element).val()){'这将检查任何空值 – Reflective

+0

@Reflective Yep :)。 – alexn

+0

@alexn除了仅突出显示第一个空白字段外,其他工作方式均适用。是否可以突出显示所有空白字段?我想我可以通过将addClass降低并更改选择器来实现它(请参阅:http://jsfiddle.net/big_smile/mSZSK/2/),但是当我这样做时,没有任何亮点! –

相关问题