2017-06-20 68 views
-1

爲了處理具有多個可選複選框的字段的驗證,我使用了webshims polyfill。驗證隱藏的多重複選框/輸入字段

該表單具有隱藏/取消隱藏表單部分的複選框。

最初的任務是隻驗證/要求隱藏部分,如果他們成爲可見。

我最初的想法是使用webshims polyfill的功能只需要一個隱藏的字段,如果與使該字段可見相關聯的複選框被選中。

問題1: 某些隱藏部分包括需要驗證的多重複選框類型字段。如何讓這些字段使用webshims的data-grouprequired =「」功能,以便我可以驗證這些多重複選框字段?

問題2: 有一個帶有5個輸入文本字段的隱藏區域(註冊/ id = div3) - 最終用戶只需填寫這些字段中的至少一個。我該如何做到這一點,以便當這個隱藏部分變得可見時,爲了驗證表單,只需要5個字段中的至少一個?

另外,如果有更好的解決方案,我很樂意學習。我對此很新。

下面是從形式的相關代碼:

<script> 
    webshim.setOptions('forms', { 
     lazyCustomMessages: true, 
     addValidators: true 
    }); 

    webshim.polyfill('forms forms-ext'); 
    </script> 

    <script> 
    function addTableRow() { 
     var $tableRow = $('tr.model-row:first-child'); 
     var $clonedRow = $tableRow.clone().show(); 
     $('#stmember').append($clonedRow); 
     } 

    function myDeleteFunction() { 
     var $memberTRs = $('tr', '#stmember'); 
     // If rowcount === 1, hide first row, don't remove it!! 
     var rowCount = $memberTRs.length; 
     if (rowCount === 1) { 
      $('tr.model-row:first-child').hide(); 
      return; 
     } 
     $memberTRs.last().remove(); 
     } 

     jQuery(function() { 

     $('#delete').click(function() { 
      myDeleteFunction(); 
     }); 

     $('#add').click(function() { 
      addTableRow(); 
     }); 

    }); 
    </script> 

    <script type="text/javascript"> 
    function showMe (it, box) { 
     var vis = (box.checked) ? "block" : "none"; 
     document.getElementById(it).style.display = vis; 
    } 
    </script> 
<body> 
<form method="post" action="mailto:[email protected]example.com" enctype="text/plain"> 
    <div class="row 50%"> 
     <div class="12u"> 
     Which of the following would you like to do with your specified patient population? Check all that apply.<br /> 
      <ul class="list"> 
       <li><input type="checkbox" id="recruit" name="todo" value="1" data-grouprequired="" onclick="showMe('div1', this)"> Recruitment for research</li> 
       <li><input type="checkbox" id="edc" name="todo" value="2" onclick="showMe('div2', this)"> Electronic Data Capture</li> 
       <li><input type="checkbox" id="registry" name="todo" value="3" onclick="showMe('div3', this)"> Registry</li> 
       <li><input type="checkbox" id="dextract" name="todo" value="4" onclick="showMe('div4', this)"> Data Extraction</li> 
       <li><input type="checkbox" id="ptpop" name="todo" value="5">Estimate of number of patients in target population</li>  
      </ul> 
     </div> 
    </div> 
<div id="div1" style="display:none"> 
    <div class="row 50%"> 
     <div class="12u"> 
      <h3><strong>Recruitment</strong></h3> 
      What methods would you like to use for patient recruitment? Check all that apply.<br /> 
       <ul class="list"> 
        <li><input type="checkbox" name="vehicle" value="Bike"> Patient Notification Through MyChart</li> 
        <li><input type="checkbox" name="vehicle" value="Car"> Study Team Member Notification When Appropriate Patient Checks In</li> 
        <li><input type="checkbox" name="vehicle" value="Car"> Provider Notification During Patient Encounter</li> 
       </ul> 
      </div> 
     </div> 
    </div>  
    <div id="div2" style="display:none"> 
     <h3><strong>Electronic Data Capture</strong></h3> 
     <div class="row 50%"> 
      <div class="6u 12u (mobile)"> 
      How would you like to capture data on your patient population? Check all that apply.<br /> 
      <ul class="list" style="margin-bottom: 0px; padding-bottom: 0px;"> 
       <li><input type="checkbox" name="vehicle" value="Bike"> Patient entry through MyChart</li> 
       <li><input type="checkbox" name="vehicle" value="Car"> Patient entry through Welcome</li> 
       <li><input type="checkbox" name="vehicle" value="Car"> Patient entry through REDCap</li> 
       <li><input type="checkbox" name="vehicle" value="Car"> Clinician entry through EPIC</li>  
       <li><input type="checkbox" name="vehicle" value="Car"> Clinician entry through REDCap</li> 
       <li><input type="checkbox" name="vehicle" value="Car"> MHi-GO (Mobile Application)</li> 
      </ul> 
     </div> 
     <div class="6u 12u(mobile)"> 
     Where would you like the data delivered to? (Server name, share name, or JHBox, Enterprise NAS, etc.) 
      <input name="subname" type="text" data-dependent-validation='{"from": "edc", "prop": "required"}' /> 
     </div> 
    </div> 
    <div class="row 50%"> 
     <div class="6u 12u(mobile)"> 
     In what format would you like to receive your data? (Excel, pipe-delimited, CSV, SQL tables) 
      <input name="subjhed" type="text" data-dependent-validation='{"from": "edc", "prop": "required"}' /> 
     </div> 
     <div class="6u 12u(mobile)"> 
     Would you like the data visualized and if so how? (Graphs, tables, diagrams, other) 
      <input name="subemail" type="text" data-dependent-validation='{"from": "edc", "prop": "required"}' /> 
     </div> 
    </div> 
</div> 
<div id="div3" style="display:none"> 
    <div class="row 50%"> 
    <h3><strong>Registries</strong></h3> 
    </div> 
    <h3 class="quest-header"><strong>What information and/or metrics of your patient population would you like to track over time?</strong></h3> 
    Please specify if applicable: 
    <div class="row 50%"> 
      <div class="6u 12u(mobile)"> 
      Diagnoses: 
       <input name="subjhed" type="text" /> 
      </div> 
      <div class="6u 12u(mobile)"> 
      Problem List: 
       <input name="subemail" type="text" /> 
      </div> 
     </div> 
     <div class="row 50%"> 
      <div class="6u 12u(mobile)"> 
      Medications: 
       <input name="subjhed" type="text" /> 
      </div> 
      <div class="6u 12u(mobile)"> 
      Labs: 
       <input name="subemail" type="text" /> 
      </div> 
     </div> 
     <div class="row 50%"> 
      <div class="6u 12u(mobile)"> 
      Other: 
       <input name="subjhed" type="text" /> 
      </div> 
     </div> 
    </div> 
    <div id="div4" style="display:none"> 
     <div class="row 50%"> 
      <div class="12u"> 
      <h3><strong>Data Extraction</strong></h3> 
      What data would you like to extract? 
      <textarea name="description" data-dependent-validation='{"from": "dextract", "prop": "required"}' ></textarea> 
      </div> 
     </div> 
     <div class="row 50%"> 
      <div class="6u 12u(mobile)"> 
      Where would you like the data delivered to? (Server name, share name, or JHBox, Enterprise NAS, etc.) 
       <input name="subemail" type="text" data-dependent-validation='{"from": "dextract", "prop": "required"}' /> 
      </div> 
      <div class="6u 12u(mobile)"> 
      In what format would you like to receive your data? (Excel, pipe-delimited, CSV, SQL tables) 
       <input name="subjhed" type="text" data-dependent-validation='{"from": "dextract", "prop": "required"}' /> 
      </div> 
     </div> 
    </div 
     <div class="row 50%"> 
      <div class="12u"> 
      <center> 
       <ul class="actions"> 
        <li><input type="submit" value="Submit Request" /></li> 
        <li><input type="submit" value="Save & Continue Later" /></li> 
        <li><input type="reset" value="Clear form" /></li> 
       </ul> 
      </center> 
      </div> 
     </div> 
    </form> 

回答

0

最終想通了這一點自己。禁用所有隱藏的字段。讓它們變得可見對於多個文本字段,可以使用webshims polyfill中的data-grouprequired,但必須創建自定義錯誤消息。