Javascript 防止select2下拉菜单调用函数的自动触发事件

Javascript 防止select2下拉菜单调用函数的自动触发事件,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,编辑: 我的目标是,当手动选择一个下拉列表时,它只应该设置另一个下拉列表的值,而不是在更改事件中调用其方法 我有两个“select2”下拉列表 @*Dropdown 1*@ <div > @Html.DropDownList(Model.DDL1, new SelectList(GetCmnlSection(), "Value", "Text", Model.DDL1),new { onchange = "DDL1Operation();" }) </div> @*D

编辑:

我的目标是,当手动选择一个下拉列表时,它只应该设置另一个下拉列表的值,而不是在更改事件中调用其方法

我有两个“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 >
我想要达到的是什么

  • 当“下拉2”手动更改时,应调用-->DDL2Operation()

  • 当“下拉列表1”更改导致“下拉列表2”自动更改时,不应调用-->DDL2Operation()

  • 我找不到很多关于“选择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”)”也无助于停止PopulateFromCommune的onchange事件

    select2不侦听下拉列表上的自定义事件,但您可以使用jQuery的事件名称空间来通过触发change.select2事件将触发器范围限制为select2。您必须相应地编辑函数DDL1操作():

    function DDL1Operation() {
        $("select[name=DDL2]").val('abc').trigger('change.select2');
    }
    
    然后需要用jquery绑定onclick处理程序:

    $("select[name=DDL1]").change(function(){DDL1Operation()});
    $("select[name=DDL2]").change(function(){DDL2Operation()});
    
    并从.NET代码中的
    元素中删除onclick属性:

    @*City Dropdown*@
    @Html.DropDownList(Model.chiefTownProp, new SelectList(GetchiefTown())
    
    @*Commune Dropdown*@
    @Html.DropDownList(Model.communeProp, new SelectList(Getcommunes(), "Value", "Text", Model.communeId))
    

    好的,您的意思是,通过实现“.trigger('change.select2');”它将只在DDl2手动更改时工作。。是吗?
    .trigger('change.select2')
    将阻止触发onchange事件
    onchange=“DDL2Operation();”
    。因此,如果手动更改选择“DDL2”,将调用
    DDL2Operation()
    ,但是
    DDL1操作()
    将不再调用
    DDL2Operation()
    。好的,这是我想要的,让我来处理它,我会让您知道不,它仍然在调用第二个下拉菜单的一次更改事件是!!!!这就像一个魅力,由于递归调用,flag有太多的bug,所以最终我不得不放弃这个想法,这是我的解决方案。谢谢
    @*City Dropdown*@
    @Html.DropDownList(Model.chiefTownProp, new SelectList(GetchiefTown())
    
    @*Commune Dropdown*@
    @Html.DropDownList(Model.communeProp, new SelectList(Getcommunes(), "Value", "Text", Model.communeId))