在jquery中阻止onchange事件

时间:2014-10-21 10:20:14

标签: javascript ajax asp.net-mvc knockout.js

我在项目中使用MVC淘汰赛。当我在下拉列表中传递viewModel时,它会继续向服务器发送ajax请求。我怎样才能避免继续请求???任何人都可以帮我这个???

我的观点

  @ko.Html.DropDownList(m => m.RoomList, new { @class = "full-width", @id = "rmch" }, "Text", "Value").Value(m=>m.NoOfRooms)

的Javascript

   $(document).ready(function () {
            $('#rmch').on("change", function (e) {
                //viewModel.NoOfRooms = $(this).val();
                    $.ajax({
                        url: '@Url.Action("DropChange", "Home")',
                        type: 'POST',
                        data: ko.mapping.toJSON(viewModel),
                        dataType: "json",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                            if (data.redirect) {
                                location.href = resolveUrl(data.url);
                            }
                            else {
                                //ko.applyBindings(viewModel, document.getElementById("p_scentsFH"));

                                ko.mapping.fromJS(data, viewModel);



                            }
                        },
                        error: function (error) {
                            alert("There was an error posting the data to the server: " + error.responseText);
                        },
                    })

                });

            })

如果我从视图中的下拉列表中删除了值部分它正在工作。但我需要处理的值。

1 个答案:

答案 0 :(得分:0)

我能想到的最简单的事情是在更新之前将dropdownlist设置为readonly,然后在完成添加新项目后,删除readonly属性。

$(document).ready(function () {
            $('#rmch').on("change", function (e) {
                //viewModel.NoOfRooms = $(this).val();
                    $.ajax({
                        url: '@Url.Action("DropChange", "Home")',
                        type: 'POST',
                        data: ko.mapping.toJSON(viewModel),
                        dataType: "json",
                        contentType: "application/json; charset=utf-8",
                        success: function (data) {
                            //this will disable the onchange event
                            $('#rmch').attr("readonly","readonly");
                            if (data.redirect) {
                                location.href = resolveUrl(data.url);
                            }
                            else {
                                //ko.applyBindings(viewModel, document.getElementById("p_scentsFH"));

                                ko.mapping.fromJS(data, viewModel);



                            }
                            //this will enable the onchange event for the next time you select something.
                            $('#rmch').removeAttr("readonly");

                        },
                        error: function (error) {
                            alert("There was an error posting the data to the server: " + error.responseText);
                        },
                    })

                });

            })