首页 > 解决方案 > 在浏览器返回事件上调用更改事件

问题描述

在 .cshtml 页面中,

<section>
    <label class="select">
        @if (itm.OutOfStock)
        {
            <select class="form-control" id="itm_SelectedQty" name="itm.SelectedQty" disabled="disabled">
                <option value=""></option>
            </select>
        }
        else
        {
            @Html.DropDownListFor(m => itm.SelectedQty, itm.QtyChoices, "", new { @class = "form-control" })
        }
        @Html.HiddenFor(m => itm.MenuItemId, new { @class = "itm_MenuItemId" })
        @Html.HiddenFor(m => itm.ItemAmount, new { @class = "itm_ItemAmount" })
        <i></i>
    </label>
</section>

并且在更改时会调用以下 jQuery 代码:

 $('.form-control').change(function () {

    var selectedQty = this.value;

 }); 

当有人点击浏览器的后退按钮时,我如何在更改功能上调用它?

标签: jqueryasp.net-mvc

解决方案


从请求中,您无法真正判断单击了后退按钮...

一种解决方案是使用window.history

另一种选择是isDirty向您的页面添加一个变量。该变量将包含在您的请求中,因此您可以使用它来检测页面是否脏(即单击了后退按钮):

在表单中添加一个隐藏变量:

/* I am using bootstrap, d-none would hide the input */
<input type="text" value="0" id="isDirty" class="d-none" />

然后在您的 JavaScript 代码中(我使用的是 jQuery),将值设置isDirty为 1

$(document).ready(function ($) {
    var isDirty = $('#isDirty');

    if (isDirty.length) { //<-- is dirty is defined

        // if user click the back button, isDirty is 1, call your function here
        if (isDirty.val() === "1") {
            // call whatever function you want to run on back button click
        }
        else {
            isDirty.val("1");  // <-- set isDirty to 1
        }
    }
});

推荐阅读