Предотвратить событие AutoTrigger в раскрывающемся списке select2 для вызова функций

Редактировать:

Моя цель состоит в том, чтобы при выборе одного раскрывающегося списка вручную, ему нужно было только установить значение другого раскрывающегося списка, а не вызывать его метод при изменении события.

У меня есть 2 "select2" выпадающих..

@*Dropdown 1*@

<div >
@Html.DropDownList(Model.DDL1, new SelectList(GetCmnlSection(), "Value", "Text", Model.DDL1),new { onchange = "DDL1Operation();" })
</div>

@*Dropdown 2*@

<div >
@Html.DropDownList(Model.DDL2, new SelectList(GetCmnlSection(), "Value", "Text", Model.DDL2),new { onchange = "DDL2Operation();" })
        </div>



<script type="text/javascript">

    $(function () { 
    var $ddl1 = $("select[name$=DDL1]");
        $ddl1.select2();
        var $ddl2 = $("select[name$=DDL2]");
        $ddl2.select2();
}
</script >

Dropdown 1 change event вызывает метод DDL1Operation(), который устанавливает значения Dropdown 2

function DDL1Operation() {

            $("select[name$=DDL2]").val('abc').trigger("change");

        });

чего я хочу добиться

  1. когда "Dropdown 2" меняется вручную -> DDL2Operation() должен вызываться

  2. когда "Dropdown 2" изменяется автоматически в результате изменения "Dropdown 1" -> DDL2Operation() не должен вызываться

Я не могу найти много сообщений о выпадающих списках "Select 2". Это может быть сделано каким-то другим методом JQuery?


Обновить

 @*City Dropdown*@

 @Html.DropDownList(Model.chiefTownProp, new SelectList(GetchiefTown(), new { onchange = "PopualateFromCity();" })

 @*Commune Dropdown*@
  @Html.DropDownList(Model.communeProp, new SelectList(Getcommunes(), "Value", "Text", Model.communeId),new { onchange = "PopulateFromCommune();" })

и их функция

 function PopualateFromCity() {

 $("select[name$=communeId]").val('1').trigger("change.select2");  
 }


 function PopulateFromCommune() { alert('PopulateFromCommune');}

"trigger("change.select2")" также не помогает остановить событие onchange для PopulateFromCommune

1 ответ

Решение

Select2 не прослушивает пользовательские события в раскрывающемся списке, но вы можете использовать пространство имен событий jQuery, чтобы ограничить область действия триггера Select2, вызывая событие change.select2. Вы должны отредактировать свою функцию DDL1Operation() соответственно:

function DDL1Operation() {
    $("select[name=DDL2]").val('abc').trigger('change.select2');
}

Затем вам нужно связать обработчики onclick с помощью jquery:

$("select[name=DDL1]").change(function(){DDL1Operation()});
$("select[name=DDL2]").change(function(){DDL2Operation()});

И удалите атрибуты onclick из <select> элементы в вашем.NET-коде:

@*City Dropdown*@
@Html.DropDownList(Model.chiefTownProp, new SelectList(GetchiefTown())

@*Commune Dropdown*@
@Html.DropDownList(Model.communeProp, new SelectList(Getcommunes(), "Value", "Text", Model.communeId))
Другие вопросы по тегам