2013-02-19 66 views
3

我有4個輸入框的幾行形式,它看起來像這樣:jQuery驗證:如果輸入一個輸入,其他應成爲強制性

<tr> 
    <td><input name="company01" id="company01" /></td> 
    <td><input name="description01" id="description01" /></td> 
    <td><input name="costs01" id="costs01" class="sum" /></td> 
    <td><input name="file01" id="file01" /></td> 
</tr> 

<tr> 
    <td><input name="company02" id="company02" /></td> 
    <td><input name="description02" id="description02" /></td> 
    <td><input name="costs02" class="sum" id="costs02" /></td> 
    <td><input name="file02" id="file02" /></td> 
</tr> 

現在,當用戶輸入的輸入之一(例如費用字段),應該強制輸入公司和描述符(但不是附件)。

文件上傳從來不是強制性的。但是,用戶必須至少在公司,說明和成本上排成一排。

有人能告訴我如何檢查至少一行是否已完成?我怎麼去檢查其他2是否已經使用jQuery驗證插件完成?

+0

當然你想要的東西 - 無條件的必填字段。在這種情況下,儘管...爲什麼不在請求中添加後續行,並且_always_要求所有行的這些字段? – canon 2013-02-19 14:50:47

+0

請給出你的解決方案。如果你使用jQuery Validate插件,你的'.validate()'代碼在哪裏? – Sparky 2013-02-19 16:05:51

回答

0

沒有SOLV使用validate方法。我所做的是,檢查一行內的所有輸入,看它們是全部空的還是全部填滿。如果任何一行不匹配,我只是創建一個警告對話框。

不是很好,但至少它得到驗證完成。

3

可以需要方法和dependency expressions

.... 
rules : { 
    company01 : { required : "#company02:blank" }, 
    description01 : { required : "#company01:filled" }, 
    costs01: { required : "#company01:filled" }, 
    // now company 2 
    company02 : { required : "#company01:blank" }, 
    description02 : { required : "#company02:filled" }, 
    costs02: { required : "#company02:filled" } 
} 
.... 
+0

由於發佈,您的解決方案無法正常工作:http://jsfiddle.net/qBLRq/ – Sparky 2013-02-19 16:36:30

+0

謝謝,我忘了選擇器上的#,現在糾正 – 2013-02-19 16:42:01

0

默認情況下,jQuery驗證不會檢查禁用的投入來完成。儘管依賴關係表達式完全符合您在問題中所要求的內容,但我認爲值得問問自己,如果您的表單允許在沒有公司名稱的情況下進行描述,這是值得的。根據您想要使用的用戶體驗,最好從描述,費用和文件上傳禁用開始,向用戶明確告知這些字段自己無法使用。然後按照jQuery驗證規則中的要求標記它們,當它們啓用時,它們是必需的。

然後在添加公司名稱時啓用它們。我會做這種類似如下:

標記

<!-- add a class to the row for ease of dom traversal --> 
<tr class="company-row"> 
    <!-- add a class to the company name for ease of selection --> 
    <td><input class="company-name" name="company01" id="company01" /></td> 
    <td><input name="description01" id="description01" /></td> 
    <td><input name="costs01" id="costs01" class="sum" /></td> 
    <td><input name="file01" id="file01" /></td> 
</tr> 

的JavaScript

$(document).ready(function() { 
    $('.company-name').on('keyup', function() { 
     var $this = $(this); 
     if($this.val() != '') { 
      $this.parents('.company-row').find('input').removeAttr('disabled'); 
     } else { 
      $this.parents('.company-row').find('input').not('.company-name').attr('disabled', 'disabled'); 
     } 
    }); 
)} 

這應該做的伎倆,但無可否認我沒有測試任何東西我只是寫。你也可能遇到這樣的情況:某人遺漏了公司描述,試圖提交,被賦予了該領域的驗證信息,刪除了公司名稱並且驗證信息不會消失(並且它們可能不是能夠提交表格)。我忘記了如何解決這個問題,但總體方法是在整個驗證器上調用.resetform(),這將刪除任何驗證消息。如果你在提交時調用它,這可能會起作用。

1

您可以使用"dependency-expression"使一個字段的規則取決於另一個字段的狀態。

這是一個工作示例...

工作演示:http://jsfiddle.net/GMK5V/

jQuery的

$(document).ready(function() { 

    $('#myform').validate({ // initialize the plugin 
     // other options, 
     rules: { 
      field1: { 
       required: true 
      }, 
      field2: { 
       required: '#field1:filled' 
      } 
     } 
    }); 

}); 

HTML(還增加了id每個input):

<form id="myform"> 
    <input type="text" name="field1" id="field1" /> 
    <input type="text" name="field2" id="field2" /> 
</form>