2016-04-14 3 views
1

Я динамически загружаю вход Select2 с помощью Ajax. Однако все работает отлично, когда я пытаюсь выбрать другое значение. По какой-то причине это не изменится. Вот пример моей проблемы: https://gyazo.com/f9ad7c3ead5fcd1d62740cc44f8d9691Select2 не может изменить значение

Как вы можете видеть, значение не изменяется, когда я нажимаю на него. Почему это происходит? Может быть, это помогает, когда я говорю, что и первое значение, и другое значение имеют идентификатор 1 (его данные из разных таблиц в базе данных), но разные тексты ... Как я могу заставить его работать?

$('.partnersupplierselect').select2({ 
    ajax: { 
     dataType: "json", 
     type: "POST", 
     data: function (params) { 
      var group = $(this).parent().parent(); 
      var choice = group.find('.partnersupplier:radio:checked').val(); 
      return { 
       term: params.term, 
       '_token': token, 
       'choice': choice 
      }; 
     }, 
     url: '{{asset('logs/create/bmi/getpartnerssuppliers')}}', 
     cache: true, 
     processResults: function (data) { 
      return { 
       results: data 
      }; 
     } 
    }, 
    "language": { 
     "noResults": function() { 
      return "Geen partners/leveranciers gevonden."; 
     } 
    }, 
    escapeMarkup: function (markup) { 
     return markup; 
    } 
}); 


$('.partnersupplier').on('change', function(){ 
    var group = $(this).parent().parent(); 
    group.find('.partnersupplierselect').select2('val', ''); 
    group.find('.partnersupplierselect').select2('data', null); 
}); 

Вот HTML, но это не должно быть проблемой. Но в случае, если кто-то захочет это увидеть:

<div class="group"> 
    <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="partner"> 
     {{Form::radio('partnersupplier', 'partner', true, array('class' => 'mdl-radio__button partnersupplier', 'id' => 'partner'))}} 
     <span class="mdl-radio__label">Test1 </span> 
    </label> 
    <label class="mdl-radio mdl-js-radio mdl-js-ripple-effect margin-radio" for="supplier"> 
     {{Form::radio('partnersupplier', 'supplier', false, array('class' => 'mdl-radio__button partnersupplier', 'id' => 'supplier'))}} 
     <span class="mdl-radio__label">Test2 </span> 
    </label> 
    <div class="form-group selectdiv" > 
     <label for="yearlypartnersuppliermaintainance">Blablabla<br></label> 
     <select id="yearlypartnersuppliermaintainance" name="yearlypartnersuppliermaintainance" class="searchselect searchselectstyle partnersupplierselect"> 
     </select> 
    </div> 
</div> 
+0

Запустить событие изменения после изменения значения select2 вручную. –

+0

Не могу заставить его работать @ArumugaRaja – Markinson

ответ

0

Я понял!

Я изменил:

$('.partnersupplier').on('change', function(){ 
    var group = $(this).parent().parent(); 
    group.find('.partnersupplierselect').select2('val', ''); 
    group.find('.partnersupplierselect').select2('data', null); 
}); 

к:

$('.partnersupplier').on('change', function(){ 
    var group = $(this).parent().parent(); 
    group.find('.partnersupplierselect').empty().trigger('change'); 
}); 

По некоторым причинам, это работает, и первая вещь, которую не делает. Странно, но, по крайней мере, я заработал!

+1

Я бы посоветовал вам изучить, почему, поскольку разница в настройке значений на что-то совсем не отличается от удаления содержимого чего-либо, как это делает '.empty()'. Также рассмотрите 'var group = $ (this) .parents ('. Group');' так что, если вы измените уровень контейнеров, ваш код станет более надежным. –

Смежные вопросы