如果使用 multiselect bootstrap 插件选择了某个单选按钮但没有用,则多次尝试将所选值限制为 1
Attempted many times to limit selected value to 1 if certain radio button is selected using multiselect bootstrap plugin but no use
我有 5 个带单选按钮的角色。因此,如果角色 roleA,B selected 用户,它会自动 selects 所有值但是如果我们检查 roleC,它只允许 select 一个 value.Role D,E 可以 select 与他们 want.However 一样多的价值,我对 RoleC 设置有疑问。所以角色 C 只允许 select 一个值,但是当我返回角色 E、C 时,复选框将被冻结,因为它是 select 角色 C。我不知道我做错了什么。帮助!
here is the code with jsFiddle https://jsfiddle.net/1ar5g43g/1/
$(文档).ready(函数(){
$("#input-user-market").multiselect('select', 字符串 | 数组, {
includeSelectAllOption:真,
启用过滤:真,
非选定文本:'Check an option!'
});
$('.checks').change(
function () {
var radioButton = $('.checks:checked').val();
if (radioButton == "RoleA" || radioButton == "RoleB") {
$('#input-user-market').multiselect('refresh', false);
$('#input-user-market').multiselect('selectAll', false);
$('#input-user-market').multiselect('updateButtonText', false);
} else
if (radioButton == "RoleC") {
$("#input-user-market").on("change", function () {
var selectedOptions = $('#input-user-market option:selected');
if ((selectedOptions.length = 1) && (selectedOptions.length = 1)) {
// Disable all other checkboxes.
var nonSelectedOptions = $('#input-user-market option').filter(function () {
return !$(this).is(':selected');
});
var dropdown = $('#input-user-market').siblings('.multiselect-container');
nonSelectedOptions.each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
input.parent('li').addClass('disabled');
});
}
else if (selectedOptions.length <= 1) {
var SelectedOptions = $('#input-user-market option').filter(function () {
console.log("1 select")
return $(this).is(':selected');
});
var dropdown = $('#input-user-market').siblings('.multiselect-container');
SelectedOptions.each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
input.parent('li').addClass('disabled');
});
}
else {
// Enable all checkboxes.
var dropdown = $('#input-user-market').siblings('.multiselect-container');
$('#input-user-market option').each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', false);
input.parent('li').addClass('disabled');
});
}
});
}
else {
$('#input-user-market option:selected').each(function () {
$(this).prop('selected', false);
});
$('#input-user-market').multiselect('refresh');
}
}
)
});
给你解决方案https://jsfiddle.net/1ar5g43g/7/
$(document).ready(function () {
$("#input-user-market").multiselect('select', String | Array, {
includeSelectAllOption: true,
enableFiltering: true,
nonSelectedText: 'Check an option!'
});
var radioButton;
$('.checks').change(function () {
radioButton = $('.checks:checked').val();
$('#input-user-market option:selected').each(function () {
$(this).prop('selected', false);
});
$('#input-user-market').multiselect('refresh');
if (radioButton == "RoleA" || radioButton == "RoleB") {
$('#input-user-market').multiselect('selectAll', false);
$('#input-user-market').multiselect('updateButtonText', false);
}
});
$("#input-user-market").on("change", function () {
var selectedOptions = $('#input-user-market option:selected');
if ( radioButton == "RoleC" && selectedOptions.length === 1) {
// Disable all other checkboxes.
var nonSelectedOptions = $('#input-user-market option').filter(function () {
return !$(this).is(':selected');
});
var dropdown = $('#input-user-market').siblings('.multiselect-container');
nonSelectedOptions.each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
input.parent('li').addClass('disabled');
});
} else if( radioButton == "RoleC"){
// Enable all checkboxes.
var dropdown = $('#input-user-market').siblings('.multiselect-container');
$('#input-user-market option').each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', false);
input.parent('li').removeClass('disabled');
});
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.js"></script>
<form class="form-horizontal" id="user-form">
<div class="form-group">
<label for="input-user-role" class="col-lg-3 col-sm-3 col-md-3 control-label">Permissions</label>
<div class="col-lg-9 col-md-9 col-sm-9">
<div class="checkbox">
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleA" required data-msg="Please choose one role" />
RoleA
</div>
<div>
<input type="radio" class="checks "id="B" name="Role" value="RoleB" required data-msg="Please choose one role" />
RoleB
</div>
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleC" required data-msg="Please choose one role" />
RoleC
</div>
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleD" required data-msg="Please choose one role" />
RoleD
</div>
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleE" required data-msg="Please choose one role" />
RoleE
</div>
</div>
<label for="Role" class="error block">Please choose one role.</label>
</div>
</div>
<div class="form-group">
<label for="input-user-market" class="col-lg-3 col-sm-3 col-md-3 control-label">Market</label>
<div class="col-lg-9 col-md-9 col-sm-9">
<select id="input-user-market" name="MarketIDs[]" multiple="multiple" class="multiselect-selected-text">
<option id="select-user-market" value="1">one</option>
<option id="select-user-market" value="2">two</option>
<option id="select-user-market" value="3">three</option>
<option id="select-user-market" value="4">four</option>
<option id="select-user-market" value="5">five</option>
</select>
</div>
</div>
</form>
我只是稍微修改了一下代码。
我有 5 个带单选按钮的角色。因此,如果角色 roleA,B selected 用户,它会自动 selects 所有值但是如果我们检查 roleC,它只允许 select 一个 value.Role D,E 可以 select 与他们 want.However 一样多的价值,我对 RoleC 设置有疑问。所以角色 C 只允许 select 一个值,但是当我返回角色 E、C 时,复选框将被冻结,因为它是 select 角色 C。我不知道我做错了什么。帮助!
here is the code with jsFiddle https://jsfiddle.net/1ar5g43g/1/
$(文档).ready(函数(){
$("#input-user-market").multiselect('select', 字符串 | 数组, { includeSelectAllOption:真, 启用过滤:真, 非选定文本:'Check an option!' });
$('.checks').change(
function () {
var radioButton = $('.checks:checked').val();
if (radioButton == "RoleA" || radioButton == "RoleB") {
$('#input-user-market').multiselect('refresh', false);
$('#input-user-market').multiselect('selectAll', false);
$('#input-user-market').multiselect('updateButtonText', false);
} else
if (radioButton == "RoleC") {
$("#input-user-market").on("change", function () {
var selectedOptions = $('#input-user-market option:selected');
if ((selectedOptions.length = 1) && (selectedOptions.length = 1)) {
// Disable all other checkboxes.
var nonSelectedOptions = $('#input-user-market option').filter(function () {
return !$(this).is(':selected');
});
var dropdown = $('#input-user-market').siblings('.multiselect-container');
nonSelectedOptions.each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
input.parent('li').addClass('disabled');
});
}
else if (selectedOptions.length <= 1) {
var SelectedOptions = $('#input-user-market option').filter(function () {
console.log("1 select")
return $(this).is(':selected');
});
var dropdown = $('#input-user-market').siblings('.multiselect-container');
SelectedOptions.each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
input.parent('li').addClass('disabled');
});
}
else {
// Enable all checkboxes.
var dropdown = $('#input-user-market').siblings('.multiselect-container');
$('#input-user-market option').each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', false);
input.parent('li').addClass('disabled');
});
}
});
}
else {
$('#input-user-market option:selected').each(function () {
$(this).prop('selected', false);
});
$('#input-user-market').multiselect('refresh');
}
}
)
});
给你解决方案https://jsfiddle.net/1ar5g43g/7/
$(document).ready(function () {
$("#input-user-market").multiselect('select', String | Array, {
includeSelectAllOption: true,
enableFiltering: true,
nonSelectedText: 'Check an option!'
});
var radioButton;
$('.checks').change(function () {
radioButton = $('.checks:checked').val();
$('#input-user-market option:selected').each(function () {
$(this).prop('selected', false);
});
$('#input-user-market').multiselect('refresh');
if (radioButton == "RoleA" || radioButton == "RoleB") {
$('#input-user-market').multiselect('selectAll', false);
$('#input-user-market').multiselect('updateButtonText', false);
}
});
$("#input-user-market").on("change", function () {
var selectedOptions = $('#input-user-market option:selected');
if ( radioButton == "RoleC" && selectedOptions.length === 1) {
// Disable all other checkboxes.
var nonSelectedOptions = $('#input-user-market option').filter(function () {
return !$(this).is(':selected');
});
var dropdown = $('#input-user-market').siblings('.multiselect-container');
nonSelectedOptions.each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', true);
input.parent('li').addClass('disabled');
});
} else if( radioButton == "RoleC"){
// Enable all checkboxes.
var dropdown = $('#input-user-market').siblings('.multiselect-container');
$('#input-user-market option').each(function () {
var input = $('input[value="' + $(this).val() + '"]');
input.prop('disabled', false);
input.parent('li').removeClass('disabled');
});
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/js/bootstrap-multiselect.js"></script>
<form class="form-horizontal" id="user-form">
<div class="form-group">
<label for="input-user-role" class="col-lg-3 col-sm-3 col-md-3 control-label">Permissions</label>
<div class="col-lg-9 col-md-9 col-sm-9">
<div class="checkbox">
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleA" required data-msg="Please choose one role" />
RoleA
</div>
<div>
<input type="radio" class="checks "id="B" name="Role" value="RoleB" required data-msg="Please choose one role" />
RoleB
</div>
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleC" required data-msg="Please choose one role" />
RoleC
</div>
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleD" required data-msg="Please choose one role" />
RoleD
</div>
<div>
<input type="radio" class="checks "id="A" name="Role" value="RoleE" required data-msg="Please choose one role" />
RoleE
</div>
</div>
<label for="Role" class="error block">Please choose one role.</label>
</div>
</div>
<div class="form-group">
<label for="input-user-market" class="col-lg-3 col-sm-3 col-md-3 control-label">Market</label>
<div class="col-lg-9 col-md-9 col-sm-9">
<select id="input-user-market" name="MarketIDs[]" multiple="multiple" class="multiselect-selected-text">
<option id="select-user-market" value="1">one</option>
<option id="select-user-market" value="2">two</option>
<option id="select-user-market" value="3">three</option>
<option id="select-user-market" value="4">four</option>
<option id="select-user-market" value="5">five</option>
</select>
</div>
</div>
</form>
我只是稍微修改了一下代码。