【发布时间】:2010-12-15 20:33:05
【问题描述】:
这是我表单中的一个小故障,但非常烦人。
我有一个复选框,如果单击它会显示其他复选框和输入字段,供用户添加更多信息。如果未单击此触发器复选框,则额外选项将消失。
但是(情节变粗),如果在表单中选中了另一个复选框,则可以选中触发复选框并出现额外的选项,但如果不选中,额外的选项不会消失!
(对不起,啰嗦了,但我想清楚!)
这是我的简单 Jquery 代码:
$(function() {
var boxes = $('.obstruct-opt');
boxes.hide();
var ob = $('li.obstructionOptions').children().eq(0);
ob.change(function() {
if ($('$(this):checked').val()) {
boxes.show();
}
else {
boxes.hide();
}
});
});
我尝试了不同的方法来检查触发器是否被选中,但欢迎提出任何建议。
编辑 请求的 HTML:(虽然简化为我的 ASP.Net 转发器控件生成它)
<ul>
<li class="obstructionOptions">
<span>
<input id="Obstruction" type="checkbox" name="Obstruction" />
<label for="Obstruction">Obstruction</label>
</span>
<span class="obstruct-opt">
<input id="WeatherProof" type="checkbox" name="WeatherProof"/>
<label for="WeatherProof">WeatherProof</label>
</span>
<span class="obstruct-opt">
<input id="WeatherProofFlap" type="checkbox" name="WeatherProofFlap"/>
</span>
</li>
<li class="obstruct-opt">
<span>Obstruction Notes</span>
<textarea name="ObstructionNotes" rows="7" cols="50" id="ObstructionNotes"/>
</li>
</ul>
希望对你有帮助!
更新: 将 if 条件替换为
if ($(this).is(":checked")) {
不会触发任何东西,看不到任何出现或消失的行为。 感谢您的建议,也许通过我的html您可以看出原因?
更新 好的,在发布我的 HTML 后,我意识到 ASP.Net 一直在缝合我! 如您所见,我选择“ob”对象作为第一个孩子,但第一个孩子是生成的跨度! ASP 一直在将我的复选框包装在跨度中,我从未怀疑过!精明!
我最后使用了这段代码:
$('ul li.obstructionOptions span').children().eq(0).click(function() {
if ($(this).is(":checked")) {
boxes.show();
}
else {
boxes.hide();
}
});
感谢adamantium,因为这完美地解决了问题!
问题解决了!
不要相信 ASP.Net 我的标记!!!
【问题讨论】:
-
如果
ob是复选框元素,您也可以考虑使用click而不是change,因为在引发change事件时跨浏览器存在差异。跨度> -
谢谢!并重写了我的更新以包含您的答案!也感谢在线演示!干得好!
标签: javascript jquery checkbox