Решено - Select2 attr "selected" перестает работать, когда установлено false - PullRequest
0 голосов
/ 18 февраля 2020

Цель состоит в том, чтобы выбрать пользователей в соответствии с опцией, выбранной при первом выборе. Он отлично работает при первом выборе этого типа пользователя. Но когда я изменяю тип пользователя и go обратно на предыдущий, он не отображает опции выбора. Но через проверяющий элемент выясняется, что опция имеет атрибут «selected»

<label for="UserType" class="col-md-2 control-label">User Type nbsp;<span class="text-danger small">*</span></label> <div class="col-md-4">
<select class="select2_demo_1 form-control" id="UserType" name="UserType">
    <option value='0' selected disabled hidden>-- Selecionar --</option>
    <option value="1">Boss</option>
    <option value="2">Admin</option>
    <option value="3">User</option>
</select>

<label for="Users" class="col-md-2 control-label">Users&nbsp;<span class="text-danger small">*</span></label><div class="col-md-10">
<select id="Users" name="Users" class="select2_demo_1 form-control" multiple  style="width:100%">
    <option data-type='1' value="1" >User Boss</option>
    <option data-type='2' value="2" >User Admin</option>
    <option data-type='2' value="3" >User Admin 2</option>
    <option data-type='3' value="4" >User</option>
</select>

$('#UserType').on('change', function() {
    var UserType = $(this).val();
    $("select#Users option:selected").attr("selected",false); 
    $("select#Users option[data-type="+ UserType +"]").attr("selected","selected");
    $("#Users").select2();  
});
$('#UserType').trigger('change');

------ Решение ------

Изменить сегмент кода

$("select#Users option:selected").attr("selected",false); 
    $("select#Users option[data-type="+ UserType +"]").attr("selected","selected");
    $("#Users").select2();

следующим

$('#UserType').select2('destroy').find('option').prop('selected', false).end().select2();
$('#UserType').select2('destroy').find('option[data-type='+ UserType+']').prop('selected', 'selected').end().select2();

1 Ответ

0 голосов
/ 18 февраля 2020

Вы можете добавить selected="true", а затем изменить его на false при применении функции attr()

...