2014-04-03 278 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 

這是假設你不想計算前導空白和尾隨空白。