在这段代码中,我正在使用类disableDivCheckbox检查chekbox,代码正在使用类disableDiv禁用所有div内容。但是,如果我将此组合应用于另一个复选框和另一个div,则无法正常工作。所以我想找到最近的div与类disableDiv并禁用该div。我正在使用disabale *因为我想要取消div及其内容。
$(".disableDivCheckbox").click(function () {
if ($(this).is(":checked")) {
$('.disableDiv *').removeAttr("disabled");
}
else {
$('.disableDiv *').val('').prop('checked', false).attr("disabled", "disabled");
}
});
答案 0 :(得分:1)
试试这个,
$(".disableDivCheckbox").click(function () {
if ($(this).is(":checked")) {
$(this).closest('.disableDiv *').removeAttr("disabled");
} else {
$(this).closest('.disableDiv *').val('').prop('checked', false).attr("disabled", "disabled");
}
});
这意味着,您将仅禁用disableDivCheckbox所属的disableDiv类的所有内容。
试一试,这样可行。
答案 1 :(得分:1)
您可以尝试这种方法:
this
导航到所有必需元素。它将使您的代码更加模块化。*
选择器。使用更具体的选择器,因为这将指定您正在操作的元素类型,并使您的代码更可重用。attr
的值设置为removeAttr
或disabled
,而不是true
和false
。您可以使用!$(..).is(":checked")
<强>示例:强>
// Only call functions. DON'T declare any functions in ready.
$(document).ready(function() {
// Have a common function.
// If size grows, this can be exported to its own file
registerEvents();
// Initialise on load states.
updateUIStates("#addBusinessObjectivesCheckbox")
});
function registerEvents() {
$(".disableDivCheckbox").click(function() {
updateUIStates(this)
})
}
function updateUIStates(el) {
var isNotChecked = !$(el).is(":checked");
var inputs = $(el)
.parents(".checkbox")
.siblings(".disableDiv")
.find('input');
inputs.attr("disabled", isNotChecked)
isNotChecked && inputs.val('').prop('checked', false)
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<fieldset id="AddBusinessObjectivesFieldset" class="">
<legend>
Add business objectives
</legend>
<div class="checkbox">
<label>
<input type="checkbox" value="addBusinessObjectivesCheckbox" name="addBusinessObjectivesCheckbox" class="disableDivCheckbox" id="addBusinessObjectivesCheckbox"> Add business objectives
</label>
</div>
<div style="border: 2px solid;margin-bottom: 5px;border-color: gray;padding: 0px 0px 0px 5px;margin-top: 5px;margin-right: 10px;" class="disableDiv">
<div class="form-inline" style="margin-top:5px;margin-bottom:5px;">
<table>
<tr>
<td>
<div class="radio">
<label>
<input type="radio" name="AddBusinessObjectives" id="" value="0" class=""> Fixed N
</label>
</div>
</td>
<td>
<div class="radio">
<label>
<input type="radio" name="AddBusinessObjectives" id="" value="1" class=""> Random upto N
</label>
<input type="text" placeholder="Enter N" id="indexTextboxAddBusinessObjectives" name="indexTextboxAddBusinessObjectives" style="width:70px" class="" />
</div>
</td>
</tr>
</table>
</div>
</div>
</fieldset>
&#13;
$(document).ready()
更像是init
函数。尝试调用函数而不是在函数中定义。这将更容易理解,因为它将描绘一个流程。onChange
一样,您可以调用一些功能:updateUIStates()
,postDataToServer()
,processResponse()
,otherTodos()
。这看起来有点矫枉过正,但从长远来看,这会有所帮助。<div class="container">
<div class="checkbox-container">...</div>
<div class="input-containers">...</div>
</div>
这将简化导航部分。无论您使用何种结构,都要保持标准化。这将保持你的JS清洁。