尝试根据单击复选框列表显示/隐藏输入
Trying to show/hide input based on click in checkbox list
我有这个javascript:
$(function () {
$.fn.enable = function () {
return this.show().removeAttr("disabled");
}
$.fn.disable = function () {
return this.hide().attr("disabled", "disabled");
}
var incomeType = $("#MyModel_IncomeTypeCheckBox");
var incomeTypeStatusSection = $("#incomeTypeStatusDiv, #incomeTypeStatusDiv input, #incomeTypeStatusDiv textarea, #incomeTypeStatusDiv select");
setControls();
incomeType.change(function () {
setControls();
});
function setControls() {
switch (incomeType.val()) {
case "FullTime":
incomeTypeStatusSection.disable();
break;
case "PartTime":
incomeTypeStatusSection.disable();
break;
case "SelfEmployed":
incomeTypeStatusSection.enable();
break;
case "SocialSecurity":
incomeTypeStatusSection.disable();
break;
case "Retirement":
incomeTypeStatusSection.disable();
break;
case "ChildSupport":
incomeTypeStatusSection.disable();
break;
case "Maintenance":
incomeTypeStatusSection.disable();
break;
case "Other":
incomeTypeStatusSection.disable();
break;
}
}
});
在我看来,代码很简单:
<div id="incomeTypeStatusDiv">
<!--Show some hidden inputs here-->
</div>
MyModel.IncomeTypeCheckBox
基于与上述case
值对应的enum
。
例如,我可以将上面的javascript与下拉列表一起使用。选择将显示/隐藏相应的<div>
。
我现在正在尝试使用相同的代码根据复选框列表选择显示/隐藏,但没有成功。我想隐藏<div>
是出现而不是隐藏。我错过了什么,它不适用于复选框列表?如何使用复选框列表执行此操作(即,如果我单击"自雇"复选框,它将显示适当的<div>
,当我取消选中"自雇"复选框时,它将隐藏<div>
?
我可以做:
$(document).ready(function () {
$("input[name$='stepincomeinformation.incometypecheckbox']").click(function () {
var check_value = $(this).val();
if (check_value == 'selfemployed') {
$("#incometypecheckbox_selfemployed").toggle(this.checked);
}
});
$("#incometypecheckbox_selfemployed").hide();
});
但是,如果<div>
被隐藏,它将不允许我继续前进,因为它正在尝试验证。另一个 javascript 不会验证<div>
是否隐藏。
JavaScript 基于 Validating a Dynamic UI with Mvc2,对我来说效果很好。它用于在隐藏<div>
时禁用验证(并使用模组MicrosoftMvcValidation.js
以及活页夹。
任何帮助,不胜感激。
请参阅下面的最终结果(基于答案(
发布的代码中,设置了一个 incomeType 变量:
var incomeType = $("#MyModel_IncomeTypeCheckBox");
在这一点上,我猜MyModel_IncomeTypeCheckBox
是分配给所有 incomeType 复选框的名称。
如果是这种情况,那么这可能解释了为什么会出现问题。
首先,由于MyModel_IncomeTypeCheckBox
是一个名称,而不是一个ID,jQuery无法通过$('#MyModel_IncomeTypeCheckBox')
访问该值
其次,即使 jQuery 可以访问普通表单提交中包含的MyModel_IncomeTypeCheckBox
内容,其余代码也只有在选中单个框时才有效,因为选中多个框会导致MyModel_IncomeTypeCheckBox
包含逗号分隔的复选框值字符串。
因此,这里有两种选择。
第一个选项是按其ID单独检查每个复选框的丑陋任务,但这不是您想要的,因为它既痛苦又低效。
第二种选择是将检查的收入类型的解释更改为如下所示:
function setControls() {
$('input:checked[name="MyModel_IncomeTypeCheckBox"]:checked').each(function () {
var checkedIncomeType = $(this).val();
handleShowHide(checkedIncomeType);
});
}
function handleShowHide(incomeType)
{
// move the switch statement here
}
现在我还没有测试过这个,但它应该让你大部分时间,至少。 如果您有任何问题,请告诉我。
我让它工作了。 @jimmyym715的回答把我引向了正确的方向。给他信用。
$(document).ready(function () {
$("input[name$='MyModel.IncomeTypeCheckBox']").
click(function () {
var check_value = $(this).val();
if (check_value == 'SelfEmployed') {
$("#IncomeTypeCheckBox_SelfEmployed, #IncomeTypeCheckBox_
SelfEmployed input").toggle(this.checked);
$("#IncomeTypeCheckBox_SelfEmployed, #IncomeTypeCheckBox
_SelfEmployed input").removeAttr("disabled");
}
else if (check_value != 'SelfEmployed') {
$("#IncomeTypeCheckBox_SelfEmployed,
#IncomeTypeCheckBox_SelfEmployed input").
hide().attr("disabled", "disabled");
}
});
$("#IncomeTypeCheckBox_SelfEmployed,
#IncomeTypeCheckBox_SelfEmployed input").hide().
attr("disabled", "disabled");
});
需要一些调整,但几乎就在那里。
- 使用2个下拉列表显示/隐藏分区
- 选中复选框时如何显示/隐藏下拉列表
- HTML 表单字段根据从下拉列表中选择的选项显示/隐藏
- 仅当单击附加到子列表的项目时才显示/隐藏子列表
- 我想要一个jquery函数在成功登录时显示隐藏的列表项
- 使用下拉列表显示/隐藏
- 数据表:列显示在“显示/隐藏列”列表中,即使它具有“显示:无”样式
- 尝试根据单击复选框列表显示/隐藏输入
- HTML & Javascript - 使用下拉列表或收音机显示/隐藏表单
- JQuery显示隐藏与无序列表:需要添加动态文本/隐藏功能
- javascript循环需要显示隐藏列表onclick一次一个
- Javascript显示隐藏下拉列表;我工作不好
- 在jQuery中显示/隐藏子列表项
- Jquery在第n项之后显示隐藏列表项,不处理ajax加载的内容
- 显示基于上一个选择下拉列表的隐藏选择选项
- 我怎么能在一个页面上有两个这样的音频播放器,而不点击其中一个,另一个播放或显示隐藏播放列表
- 如何显示/隐藏列表项目中的项目MVVM剑道
- JavaScript链式下拉列表显示/隐藏一个Div
- 如何显示/隐藏生成的无序列表
- 如何使用jquery分别使用interval显示/隐藏列表项