我有一个带问题的表格。如果回答是,则会出现一组复选框;如果回答没有任何反应。
<tr>
<td>Question?</td>
<td>
<label><input name="selector" type="radio" value="yes" />Yes</label>
<label><input name="selector" type="radio" value="no" />No</label>
<br />
<div id="subset">
<label class="disabled"><input name="select1" type="checkbox" value="select1" />option1</label><br />
<label class="disabled"><input name="select2" type="checkbox" value="select2" />option2</label><br />
<label class="disabled"><input name="select3" type="checkbox" value="select3" />option3</label><br />
<label class="disabled"><input name="select4" type="checkbox" value="select4" />option4</label>
</div>
</td>
</tr>
<script>
$(document).ready(function(){
$('input[name=selector]').click(function(){
var selector = $(this).val();
if (selector == 'no') {
$('#subset label').addClass('disabled');
$('#subset input').attr('disabled', 'disabled');
$('#subset input').attr('checked', false);
} else {
$('#subset label').removeClass('disabled');
$('#subset input').removeAttr('disabled');
}
});
});
</script>
此代码工作正常,但表单可以预先填写。如果是这样,它必须以相同的方式工作:如果选择是,则应该可以看到sset。
我知道我可以在一个单独的代码块中再次使用jQuery轻松完成此操作(见下文),但我希望我能通过仅改变现有代码来做到这一点。
var selector = $('input[name=selector]:checked').val();
if (selector == 'no') {
$('#subset label').addClass('disabled');
$('#subset input').attr('disabled', 'disabled');
$('#subset input').attr('checked', false);
} else {
$('#subset label').removeClass('disabled');
$('#subset input').removeAttr('disabled');
}
预填充是巧妙的,看起来像下面的代码,我把它放在所有的收音机和复选框标签。
{{if $array.ELEMENT.answer=='VALUE'}} checked{{/if}}
所以问题是,如何在不添加大量代码的情况下获得额外的功能?
谢谢!
答案 0 :(得分:1)
触发 DOM 就绪事件中的点击事件..
$(function(){
$('input[name=selector]').click(function(){
var selector = $(this).val();
if (selector == 'no') {
$('#subset label').addClass('disabled');
$('#subset input').attr('disabled', 'disabled');
$('#subset input').attr('checked', false);
} else {
$('#subset label').removeClass('disabled');
$('#subset input').removeAttr('disabled');
}
});
$('input[name=selector]:checked').click();
// Will trigger the click event on page load
});
因此,根据预填表格,将为已检查项目触发此事件。
<强> Check Fiddle 强>
答案 1 :(得分:0)
你能否将点击处理程序重构为一个函数,并在点击和页面加载时调用该代码?
答案 2 :(得分:0)
尝试jQuery的toggleClass
。它会在每次备用呼叫时添加/删除该类。
有关详细信息,请参阅http://api.jquery.com/toggleClass/。
答案 3 :(得分:0)
只需在单独的区块中隔离您的功能:
function processForm(){
var selector = $('input[name=selector]:checked').val();
if (selector == 'no') {
$('#subset label').addClass('disabled');
$('#subset input').attr('disabled', 'disabled');
$('#subset input').attr('checked', false);
} else {
$('#subset label').removeClass('disabled');
$('#subset input').removeAttr('disabled');
}
}
然后,您可以直接或在点击内进行调用。