2012-06-14 62 views
0

所以我有一個多部分表單,其中包含用於文本,整數和文件上傳的字段。
我可以使用dataAnnotations和validationMessageFor作爲文本和int字段,但不能用於文件上傳。 所以我implemneted下面的代碼來驗證文件上傳:多部分表單驗證

$(document).ready(function() { 
      $("#Error").hide(); 
      var pdfFile = '<%=Model.PdfFile %>'; 
      if (pdfFile == null || pdfFile1 == "") { 
       $("#Submit").click(function() { 
        var ext = $('#File').val().split('.').pop().toLowerCase(); 
        var file = $('#File').val(); 
        if ((!file || ext != 'pdf')) { 
         $('#Error').show(); 
         return false; 
        } 
        return true; 
       }); 
      } 
     }); 

此代碼的偉大工程,只要我能在這一點告訴我們,但它在其他方面的檢查,然後才能執行,所以看起來稀鬆。 換句話說,如果用戶單擊提交時表單上有多個錯誤, 會出現文件上傳驗證消息,但不會顯示其他字段。 如果用戶上傳一個有效文件並再次點擊提交,則會顯示其他字段的驗證消息。馬虎。 所以,我想實現的文本框jQuery驗證爲好,但出於某種原因,這並不工作:

$(document).ready(function() { 
      $("#captionVal").hide(); 
      $("#Submit").click(function() { 
       var caption = $("#Caption").val(); 
      if (!caption || caption == "") { 
        $("#captionVal").show(); 
        return false; 
       } 
       return true; 

      }); 
     }); 

似乎總是讀取場爲空,所以它永遠不會返回true。

我試圖在if語句,但無濟於事前添加

$("Caption").change(function() { 

以及

$("#Caption").bind(function() { 

我也使用jQuery驗證試圖與

$(document).ready(function() { 
     $("#term").validate(); 
     }); 

但是,在所有什麼也沒做(也許我只是不知道如何使用該插件?)

所以我的問題是,如何我可以驗證文本框嗎?
真的所有我需要做的是確保它們不爲空,如果他們都在顯示錯誤的標籤(不是彈出)提交單擊 或者我如何使用驗證插件?我下載了.zip文件並添加了(&引用).validate.js文件,但 .validate方法似乎沒有做任何事情?

+0

這句話令我擔憂:_「我已經下載了'.ZIP '文件並添加了'.validate.js'文件...「_ - 特別是提到壓縮文件似乎意味着你沒有** un-zip ** JS文件。 (畢竟,你如何獲得插件應該是不相關的。)我的解釋可能是錯誤的。你在看控制檯並看到任何錯誤? – Sparky

+0

@ Sparky672我認爲你讀得太多了...... – Terry

+0

@Terry,也許,但至少讓OP糾正我,畢竟我確實說過 - 「我的解讀可能是錯誤的。 (請參閱OP對答案的第一個評論,_「冒着聽起來真的愚蠢的風險,我想我可能不知道如何正確安裝插件。」_) – Sparky

回答

4

確保您的表單字段具有名稱屬性,並且您在插件聲明期間或通過內置的類功能指定驗證規則。

您也可以添加自定義的驗證方法,對進入插件並使用它像已經建成的那些:

例子:

<html> 
<head> 
    <script src="path/to/jquery.js"> 
    <script src="path/to/jquery-validator.js"> 
    <script> 
    // Add a custom method for file validation (going off your logic - haven't tested) 
    jQuery.validator.addMethod("file", function(value, element) { 
     var ext = value.split('.').pop().toLowerCase(); 
     return (!value || ext != 'pdf'); 
    }, "Please make sure your file has a valid PDF extension"); 

    // This will make the form pass all validation checks on submit and 
    // display errors if any occur 
    $('#myForm').validate(); 
    </script> 
</head> 
<body> 
    <form id="myForm"> 
     <input type="text" name="email" class="required email" /> 
     <input type="text" name="username" class="required" /> 
     <input type="text" name="file" class="required file" /> 
     <input type="submit" value="Submit form and get your ass validated!" /> 
    </form> 
</body> 
</html> 

自定義驗證方法參考:http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

編輯:剛注意到插件內置了文件擴展名驗證方法: http://docs.jquery.com/Plugins/Validation/Methods/accept#extension

編輯2:這裏是你如何能不使用自定義方法(使用一個我剛剛發現內置)驗證:

<input type="text" name="file" /> 

    $('#myForm').validate({ 
     rules: { 
      file: { 
       required: true, 
       accept: "pdf" 
      } 
     } 
    }); 
+0

冒着聽起來真是愚蠢的風險,我想我可能不知道如何正確安裝插件。我在class =「required」中得到一個錯誤,那就是它是一個未知的CSS類。 –

+0

好的,我更新了所需的一切,使驗證插件工作(以適當的順序)。不知道什麼是「未知的CSS類」,CSS類不應該被驗證對任何東西。 – Terry

+0

@傑夫,特里剛剛說了什麼。你不可能得到關於未知CSS類的錯誤。無論是否定義,您都可以使用任何類名......您永遠不會看到錯誤。到底發生了什麼錯誤? – Sparky