爲了處理具有多個可選複選框的字段的驗證,我使用了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>