2013-02-28 42 views
0

我的表單設置了一些HTML5要求填寫字段提交之前可以繼續,但因爲這不支持在< IE10,我需要確保那些瀏覽器不允許提交空的形式...通過jQuery的驗證失敗時,它不應該

<form name="upload" method="post" action="send_form_email3.php" enctype="multipart/form-data"> 
    <div width="100%" class="con3"> 
     <div class="lable"> 
      <label for="first_name">First Name *</label> 
     </div> 
     <input type="text" name="first_name" id="first_name" class="span4" required /> 

     <div class="lable"> 
      <label for="email">Email Address *</label> 
     </div> 
     <input type="text" name="email" id="email" class="span4" required /> 

     <div class="lable"> 
      <label for="telephone">Contact Number *</label> 
     </div> 
     <input type="text" name="telephone" id="telephone" class="span4" required /> 

     <div class="lable"> 
      <label for="comments">Why are you the fun, energetic person that we are looking for? *</label> 
     </div> 
     <textarea name="comments" rows="8" id="comments" class="span4" required /></textarea> 

     <div class="lable"> 
      <label for="upload">Send Us Your CV *</label> 
     </div> 
     <input type="file" name="upload" id="upload" required /> 

     <input type="submit" value="Submit" class="btn btn-success"> 
    </div> 
</form> 

來處理< IE10這種驗證(有沒有任何其他非DOM兼容的瀏覽器了嗎?大聲笑),我寫了一些jQuery的。

大多數情況下,其他形式的工作,但這次我想我可能會嘗試改進它一點,並通過.each控制循環,而不是運行每個輸入新的if語句。

$("form[name=upload]").submit(function() { 
    // Internet Explorer uses a different call to stop form submission 
    // so we need to determine which browser is being used. 

    // DOM compliant browsers use HTML5 to do this. 

    if ($.browser.msie) 
    { 
     ($("form[name=upload] input").each(function() { 
      if ($(this).val() == "") 
      { 
       var target, errmsg; 
       switch ($(this).attr("name")) 
       { 
        case "first_name": 
         errmsg += "Please enter your name.\r\n"; 
         break; 
        case "email": 
         errmsg += "Please enter your email address.\r\n"; 
         break; 
        case "telephone": 
         errmsg += "Please enter a contact number.\r\n"; 
         break; 
        case "comments": 
         errmsg += "Please tell us why you are the fun, energetic person that we are looking for.\r\n"; 
         break; 
        case "upload": 
         errmsg += "Please upload your CV so that we can review it."; 
         break; 
       } 
       event.returnValue = false; 
       alert(errmsg); 
      } 
     }); 
    } 
}); 

我不是很熟悉.each(),所以我不能肯定自己,如果我是正確的。目前這個代碼仍然允許表單提交通過,即使有空字段也不會提示。

+0

jQuery的哪個版本您使用的? $ .browser已棄用。 – 2013-02-28 13:28:06

+0

看起來像頁面中引用的最早的是1.8.1。如果不推薦使用,那麼這裏的首選方法是什麼? – Ortund 2013-02-28 13:29:05

+0

$ .support()用於確定瀏覽器是否支持curent方法。我用你的代碼設置了一個小提琴,並且HTML5保持不必求助於JavaScript或jQuery的提交表單 - http://jsfiddle.net/LRFbR/ – 2013-02-28 13:34:09

回答

1

下面的代碼似乎工作:

  • 修正了一些語法錯誤與括號和花括號(標記爲textarea的具有雙重接近「/」太)
  • 取代$ .browser.msie這是自jQuery的1.9與navigator.userAgent.match(/msie/i)不支持(測試支持required屬性可能會更好)

    $("form[name=upload]").submit(function() {  
    // Internet Explorer uses a different call to stop form submission 
    // so we need to determine which browser is being used. 
    
    // DOM compliant browsers use HTML5 to do this. 
    
    if (navigator.userAgent.match(/msie/i)) 
    { 
        $("form[name=upload] input").each(function() { 
         if ($(this).val() == "") 
         { 
          var target, errmsg; 
          switch ($(this).attr("name")) 
          { 
           case "first_name": 
            errmsg += "Please enter your name.\r\n"; 
            break; 
           case "email": 
            errmsg += "Please enter your email address.\r\n"; 
            break; 
           case "telephone": 
            errmsg += "Please enter a contact number.\r\n"; 
            break; 
           case "comments": 
            errmsg += "Please tell us why you are the fun, energetic person that we are looking for.\r\n"; 
            break; 
           case "upload": 
            errmsg += "Please upload your CV so that we can review it."; 
            break; 
          } 
          event.returnValue = false; 
          alert(errmsg); 
         } 
        }); 
        } 
    }); 
    

希望這將有助於最終

+0

這將如何與jQuery 1.8.x一起工作?我在這個頁面上不使用1.9 – Ortund 2013-02-28 14:18:13

+0

@Ortund這也適用於1.8。 (順便說一下,不要忘記將你的錯誤消息初始化爲空字符串) – jbl 2013-02-28 14:22:51

+0

表單提交仍然通過:/我認爲我的邏輯存在缺陷 – Ortund 2013-02-28 14:23:25

0

所以我就急忙出來,包圍我的腳本塊有一個條件語句:

<!--[if IE]> 
<script type="text/javascript"> 
    // Do jquery validation here... 
</script> 
<![endif]-->