Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在更新选定值时防止onChange事件触发_Jquery_Asp.net_Asp.net Mvc - Fatal编程技术网

Jquery 在更新选定值时防止onChange事件触发

Jquery 在更新选定值时防止onChange事件触发,jquery,asp.net,asp.net-mvc,Jquery,Asp.net,Asp.net Mvc,我想知道这里是否有人能提供建议。使用MVC ASP.NET。我有一个htmlhelper ddl @Html.DropDownListFor(m => m.ddlStartTime, new SelectList(Model.StartTimes, "Text", "Value", ViewBag.selected), new { data_test = "true", @Class = "form-control", onchange = "SubmitDayViewer(t

我想知道这里是否有人能提供建议。使用MVC ASP.NET。我有一个htmlhelper ddl

      @Html.DropDownListFor(m => m.ddlStartTime, new SelectList(Model.StartTimes, "Text", "Value", ViewBag.selected), new { data_test = "true", @Class = "form-control", onchange = "SubmitDayViewer(this.id)" })
然后我有一个AJAXJSON请求,它去获取我的数据,并返回一个部分视图以及一些其他json字符串数据

    function SubmitDayViewer(pId) {
        var obj1 = { dateValue: $('#dteTester').val(), timeValue: $('#ddlStartTime').val(), callerID: pId };
        $.ajax({
            type: "POST",
            url: '@Url.Action("_ADayRoomViewerPartial", "Common")',
            data: obj1,
            datatype: "json",
            success: function (data) {
                  $("#ddlStartTime").select2("val", data.DDLTimeValue);
            }
        });
}

我无法克服的问题是,一旦我更改所选值,就会阻止@Html.DropDownListFor onChange事件触发。所以我最终进入了一个无限循环。我需要设计一种只在用户更改实际ddl时触发事件的方法。当页面上的其他控件更新并且因此需要在不触发事件的情况下动态更改所选值时,不能手动更改。所以基本上,在某些情况下,一经改变就开火,而不是全部

关闭时删除更改事件
,然后在
打开时重新添加它
:-

function SubmitDayViewer() {
        var obj1 = { dateValue: $('#dteTester').val(), timeValue: $('#ddlStartTime').val(), callerID: this.id};
        $.ajax({
            type: "POST",
            url: '@Url.Action("_ADayRoomViewerPartial", "Common")',
            data: obj1,
            datatype: "json",
            success: function (data) {
                  $("#ddlStartTime").off('change', SubmitDayViewer);
                  $("#ddlStartTime").select2("val", data.DDLTimeValue);
                  $("#ddlStartTime").on('change', SubmitDayViewer);
            }
        });
}
另外,在函数中使用
,而不是将其传入

编辑

如果这种情况仍然发生,则select2必须以某种方式延迟设置。因此,您可以查看插件代码以了解发生了什么,或者可以添加超时来重新添加更改事件

$("#ddlStartTime").off('change', SubmitDayViewer);
$("#ddlStartTime").select2("val", data.DDLTimeValue);
window.setTimeout(function(){
    $("#ddlStartTime").on('change', SubmitDayViewer);
}, 2000); // 2 seconds
就我个人而言,我会在插件中寻找更干净的解决方案