2015-10-19 80 views
1

我想知道是否有人可以在这里提供建议。使用MVC ASP.NET。我有一个DDL的HtmlHelper防止onChange事件触发,同时更新选定的值

 @Html.DropDownListFor(m => m.ddlStartTime, new SelectList(Model.StartTimes, "Text", "Value", ViewBag.selected), new { data_test = "true", @Class = "form-control", onchange = "SubmitDayViewer(this.id)" }) 

然后我有去,并得到我的数据,并返回与其他一些JSON字符串数据一起的局部视图一个AJAX 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时触发事件。当页面上的其他控件更新时不需要手动,因此需要在不触发事件的情况下动态更改选定值。所以基本上在有些情况下不会全部改变。

回答

1

off删除更改事件,然后用on重新添加它: -

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); 
      } 
     }); 
} 

也,在函数中使用this而不是传递它的

编辑

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

$("#ddlStartTime").off('change', SubmitDayViewer); 
$("#ddlStartTime").select2("val", data.DDLTimeValue); 
window.setTimeout(function(){ 
    $("#ddlStartTime").on('change', SubmitDayViewer); 
}, 2000); // 2 seconds 

我个人会在插件中寻找一个更清洁的解决方案。

+0

辉煌答案 –

+0

我仍然无限循环。感谢您的帮助,让我走上正轨。我有问题必须与我的jQuery插件Select2()。 –

+0

请参阅更新。 – BenG