我有一种情况,我想检查所有复选框,其中用户角色对应于我从数据库返回的RoleId,如下所示:
$(document).on("click", ".btnEdit", function () {
user_id = $(this).val();
untickAll();
$.post("/Administrator/GetUserData", { id: $(this).val() }, function (data) {
console.clear();
$.each(data.user.Roles, function (i, item) {
for (var j = 1; j <= 4; j++) {
if ($("#check" + j).attr("roleid") == item.RoleId) {
tickCheckbox(j.toString());
console.log("Ticked: #" + j + " checkbox");
}
}
});
});
});
data.user.Roles对象数组包含以下值:
RoleId: 1
RoleId: 2
// and so on...
现在我已将静态属性添加到名为“roleid”的HTML元素中,其中每个复选框都具有相应的角色,如下所示:
<div class="col-sm-4">
<h4>User roles:</h4>
<div class="am-checkbox">
<input id="check1" roleid="1" type="checkbox">
<label for="check1">Role 1</label>
</div>
<hr />
<div class="am-checkbox">
<input id="check2" roleid="2" type="checkbox">
<label for="check2">Role 2</label>
</div>
<hr />
<div class="am-checkbox">
<input id="check3" roleid="3" type="checkbox">
<label for="check3">Role 3</label>
</div>
<hr />
<div class="am-checkbox">
<input id="check4" roleid="4" type="checkbox">
<label for="check4">Role 4</label>
</div>
<hr />
</div>
请注意我如何计算复选框值:
check1 => corresponds exactly to role id = 1
check2 => correspodnds exactly to role id = 2
// and so on...
现在问题出现在这里,请注意方法untickAll():
function untickAll() {
for (var i = 1; i <= 4; i++) {
$('#check' + i).prop('checked', false);
}
}
每次单击按钮编辑时,方法取消(重置)所有复选框...
现在在使用jQuery进行foreach循环时,我检查特定的复选框是否包含属性“roleid”,该属性与DB中的属性相对应,如果有,我将勾选复选框...
当我调用方法时,会出现问题:
untickAll();
一旦我这样做,每次所有复选框都因某种原因而未经检查...
我还放了console.log("Ticked: " + j + " checkbox");
if语句是否通过以查看它是否尝试检查特定的复选框,并且它确实在控制台中输出如下:
"Ticked #1 checkbox"
但是由于某种原因,复选框仍未选中...
如果我删除untickAll();方法,复选框只在我第一次单击编辑按钮时被检查,下次它只会继续检查匹配的值(不像我想的那样首先重置它们)......
我在这里做错了什么?