2014-04-03 228 views
1

我正在运行一个客户端验证的JavaScript,它将验证数据后通过ajax帖子提交表单。这里是JavaScript:检查字符串是否为空jquery

$(".button").click(function() { 

      $(".error").hide(); 

      var name = $(":input.name").val(); 
      if ((name == "") || (name.length < 4)){ 

       $("label#nameErr").show(); 
       $(":input.name").focus(); 
       return false; 
      } 

      var email = $(":input.email").val(); 
      if (email == "") { 

       $("label#emailErr").show(); 
       $(":input.email").focus(); 
       return false; 
      } 


      var phone = $(":input.phone").val(); 
      if (phone == "") { 

       $("label#phoneErr").show(); 
       $(":input.phone").focus(); 
       return false; 
      } 

      var comment = $("#comments").val(); 
      if ((!comment) || (comment > 100)) { 

       $("label#commentErr").show(); 
       $("#comments").focus(); 
       alert("hello"); 
       return false; 
      } 

      var info = 'name:' + name + '&email:' + email + '&phone:' + phone + '&comment:' + comment; 
      var ajaxurl = '<?php echo admin_url("admin-ajax.php"); ?>'; 
      alert(info); 

      jQuery.ajax({ 

       type:"post", 
       dataType:"json", 
       url: myAjax.ajaxurl, 
       data: {action: 'submit_data', info: info}, 
       success: function(response) { 
        if (response.type == "success") { 

         alert("success"); 
        } 
        else { 

         alert("fail"); 
        } 
       } 
      }); 

      $(":input").val(''); 
      return false; 


     }); 

四个输入字段是姓名,电子邮件和电话三个文本输入,然后一个文本区域的意见/查询部分。问题是,如果我将textarea留空或输入超过100个字符,则脚本不会进入if((!comment)||(comment> 100)) 语句。我想知道是否有一个不同的值被分配给一个textarea,当它是空白,停止代码看到它为空?

+0

您好!不要忘记接受答案 - 你甚至可以得到2个代表! – SomeKittens

回答

17

您需要检查的commentlength属性(也,你有一些额外的小括号,它们不会打破任何东西,但并不需要)。

if (!comment || comment.length > 100) { 

什么是目前发生的事情是,你要确定给定的字符串小于一个数字,这是相当愚蠢的,所以JS声明它假。检查comment.length将它与一个数字进行比较,这正是您希望它执行的操作。

!comment作品,因为空字符串是falsy,虽然你认为是空的可能不是(例如,用空格字符串是非空:' ')。使用.trim()以消除讨厌的空白:

if (!comment.trim() && comment.length > 100) 

(作为一个侧面说明,没有上述要求的jQuery,它的所有的JavaScript)

+0

但是,如果OP将字段留空,为什么它不起作用呢? *“问题是,如果我离开textarea空白或输入超过100个字符...”* –

+0

我在回答中涉及到这一点,未处理修剪条件 –

+0

!注释只处理未定义或null的情况(在某些情况下为null ) –

-1
if (comment == '' || comment.length > 100) { 
+1

哇,downvote,迫不及待想听... – Shomz

+1

但是...它的工作原理。 OP没有使用.length属性来检查评论的长度。 (用户我回复删除他们的帖子) – Scott

+0

@ user2864740那么对于你来说,'comment> 100'和'comment.length> 100'是一样的吗?哇... – Shomz

-1

一个原因,这里的每个人都犯了一个错误,如果我提供了一个包含100个空格的空字符串返回true。

当前和正确的方式来检查空字符串

if (!comment && comment.trim().length > 100) 

trim实际上意味着从一开始和结束的字符串空的空间将被删除。

+0

'String#trim'在浏览器上仍然缺少在野外使用的重要信息。 –

+0

不同意,可在Opera,I.E,Firefox,Chrome和Avant上使用,也可在移动浏览器上使用。 –

+1

@ Ori:*叹* IE8在野外仍然有很大的用途(取决于你问的人,2014年4月在这里的6.2%和21.4%之间)。它没有'String#trim'。 –

2

你有两种症状:

  1. 留空该字段不会触发条件,并

  2. 输入超过100个字符不会触发条件。

其他人所指出的那样,为什么#2不会发生:你做comment > 100你需要comment.length > 100

第一个很可能是因为该字段不是完全空白,而是其中有一些空白。我们可以用jQuery的$.trim(它跨浏览器工作,而字符串.trim在IE8中不起作用)删除空白。所以:

var comment = $.trim($("#comments").val()); // trim removes leading and trailing whitespace 
if ((!comment) || (comment.length > 100)) { // Include .length 

这是假设你不想计算前导空白和尾随空白。