2016-11-23 4 views
0

У меня есть список пользователей, и у каждой из них есть роль.Как отключить <option> согласно <option selected>?

Пользователь, выбранный как «Líder», не может иметь более одной роли, только «Líder».

Если пользователь выбирает другой вариант (дочери), опция «Líder» должна быть отключена. Пользователи, не являющиеся «Líder», могут иметь более одной роли.

Вот моделирование задачи: jsfiddle

HTML:

<select class="selectpicker" id="funcao" multiple data-max-options="1"> 
    <option value="lider">Líder</option> 
    <option value="conhecimento">Para Conhecimentor</option> 
    <option value="participante">Participante</option> 
</select> 
<br><br> 
<select class="selectpicker" id="funcao" multiple data-max-options="1"> 
    <option value="lider">Líder</option> 
    <option value="conhecimento">Para Conhecimentor</option> 
    <option value="participante">Participante</option> 
</select> 
<br><br> 
<select class="selectpicker" id="funcao" multiple data-max-options="1"> 
    <option value="lider">Líder</option> 
    <option value="conhecimento">Para Conhecimentor</option> 
    <option value="participante">Participante</option> 
</select> 
<br><br> 
<select class="selectpicker" id="funcao" multiple data-max-options="1"> 
    <option value="lider">Líder</option> 
    <option value="conhecimento">Para Conhecimentor</option> 
    <option value="participante">Participante</option> 
</select> 

JS:

$('select').change(function(){ 
    var sel = $(this); 
    var data = sel.data('prev'); 
    var val = sel.val(); 
    var prev; 
    if(data){ prev = data.val; } 
    sel.data('prev', {val: val}); 
    sel.nextAll().each(function(){ 
     if(prev){ 
      $(this).find("[value='" + prev+ "']").prop("disabled",false); 
      $('.selectpicker').selectpicker('refresh'); 
     } 
     $(this).find("[value='" + val + "']").prop("disabled",true); 
     $('.selectpicker').selectpicker('refresh'); 
    }); 
    $('.selectpicker').selectpicker('refresh'); 
}); 
+2

опубликуйте свои попытки –

+0

https://jsfiddle.net/andrealbson/33q72pto/ –

+0

Я почти получил то, что хотел, но пользователь, который был выбран как «Líder», имеет возможность отключить ... и во время отправки форма представляет ошибку. Ошибка возникает из-за того, что опция select (parent) также отключена и при отправке формы эта опция пуста ... https://jsfiddle.net/andrealbson/9e2ovnth/ –

ответ

0

Вы можете проверить полученный эффект на код ниже - jsfiddle

$('select').change(function() { 
    var sel = $(this); 
    disableThis(sel); 
    $('.selectpicker').selectpicker('refresh'); 
}); 

function disableThis(sel) { 
    var temSelecionado = false; 

    $("option[value='1']").each(function() { 
     if (this.selected) { 
      temSelecionado = true; 

      $(this).parent().each(function() { 
       $(this.options).each(function() { 
        if ($(this).val() != "1") { 
         $(this).prop("disabled", true); 
        } 
       }) 
      }); 
     } 
     else { 
       $(this).parent().each(function() { 
       $(this.options).each(function() { 
        if ($(this).val() != "1") { 
         $(this).prop("disabled", false); 
        } 
       }) 
      }); 
     } 
    }); 
} 
+0

Это почти что, @Arkej. Однако, если какой-то выбор выбран как «Лидер», этот параметр должен быть отключен в других selects ... –

+0

Я изменил логику ... и нашел новую проблему: Как мне, когда я отменю выбранную опцию выбора , вернуть его в «начальное состояние»? Вот симуляция моей проблемы: https://jsfiddle.net/andrealbson/o1xs3m8x/ –