javascript - jQuery:在模式上构建一个表单,其中角色字段为选择,用户字段为其他。如果在其他选择上选择了角色,则必须禁用角色
问题描述
编写一个更新用户角色的动态表单。有2个角色leader(可授予1人)和成员用户,一个团队由4名成员(包括leader)组成。通过形式,他们选择谁成为领导者并作为成员休息。因此,在我通过 jQuery 绑定的表单中,使用选择下拉列表来选择具有 2 个选项领导者和成员的角色。如果在任何选择的领导者中被选中,我应该如何禁用。我可以在后端站点限制此验证,但我也希望这件事可以在前端完成,它会更好。
以下是片段:
function updateRole(){
$('#update-table-body').empty();
let body='';
for(var i=0;i<members.length;i++)
{
body+='<tr>';
body+='<th><input type="hidden" name="member'+i+'" value="'+members[i].id+'"/>'+members[i].name+'</th>';
body+='<td><div class="control"><div class="select">\
<select id="role_'+i+'" name="role'+i+'" onchange="dissRole()">\
<option hidden></option>\
<option value="1">Leader</option>\
<option value="2">Member</option>\
</select></div></div></td>';
body+='</tr>';
}
body+='<input type="hidden" id="count" name="count" value="'+members.length+'"/>';
$('#update-table-body').append(body);
$('.modal').addClass('is-active');
}
和
function dissRole(){
$(this)
.siblings('select')
.children('option[value="1"]')
.prop('disabled', true)
.siblings().removeAttr('disabled');
}
编辑1:普通HTML模板中还有其他选择。
解决方案
更改dissRole()
功能并在这里选择一个类似的 id 是有效的答案
function dissRole(){
// List of ids that are selected in all select elements
var selected = new Array();
// Get a list of the ids that are selected
$('select[id^="role_"] option:selected').each(function()
{
selected.push($(this).val());
});
// Walk through every select option and enable if not
// in the list and not already selected
$('select[id^="role_"] option').each(function()
{
if (!$(this).is(':selected') && $(this).val() != '' && $(this).val() != '2')
{
var shouldDisable = false;
for (var i = 0; i < selected.length; i++)
{
//alert(selected.length);
if (selected[i] == $(this).val())
shouldDisable = true;
}
$(this).removeAttr('disabled', 'disabled');
if (shouldDisable)
{
$(this).attr('disabled', 'disabled');
}
}
});
}
推荐阅读
- vba - VBA可以调用windows文件传输弹出窗口吗?
- python - 为什么有些文本的位置在画布和后记中看起来不同?
- java - Stream.flatMap() 从 char[] 到字符流
- javascript - 如何从位运算符(1 << X)生成的数字中获取 X(数字)
- ios - 通过 UIButton Toggle 更改地图类型 - Google Maps iOS SDK
- javascript - 具有不同点形状的两层
- git - 如果我们从本地推送到远程提交,它是分支提交 X 和功能提交 Y 的合并,但远程提交 Y 不存在,它会工作吗?
- java - 如何对两个数组进行排序但保持相应的顺序?
- javascript - Vue.js - 无法触发 DOM 更新
- pandas - 如何在 Pandas 的 DataFrame 中创建一个新的条件计数列