Javascript 当存在未保存的更改时,阻止下拉列表选择

Javascript 当存在未保存的更改时,阻止下拉列表选择,javascript,c#,jquery,asp.net,Javascript,C#,Jquery,Asp.net,我有一个页面,其中有四个下拉控件。根据选择,我显示了一个数据网格,网格的每一行上都有一个文本框。我从用户处获取每个控件的输入,并在单击“保存”时保存到数据库 问题: 当页面上有未保存的更改,并且用户试图更改下拉列表值时,我很难提醒用户,这会导致在网格上显示不同的数据集 我有一个隐藏字段,当页面上有更改时,它会捕获 <asp:HiddenField ID="hfSaveFlag" runat="server" Value="false" ClientIDMode="Static" />

我有一个页面,其中有四个下拉控件。根据选择,我显示了一个数据网格,网格的每一行上都有一个文本框。我从用户处获取每个控件的输入,并在单击“保存”时保存到数据库

问题:

当页面上有未保存的更改,并且用户试图更改下拉列表值时,我很难提醒用户,这会导致在网格上显示不同的数据集

我有一个隐藏字段,当页面上有更改时,它会捕获

<asp:HiddenField ID="hfSaveFlag" runat="server" Value="false" ClientIDMode="Static" />
到目前为止,这一切正常,在文本框中更改值时,该值被设置为
true

现在,我的下拉列表如下:

<asp:DropDownList ID="ddlRFP" Width="250" runat="server"  AutoPostBack="true" 
                  OnSelectedIndexChanged="ddlRFP_SelectedIndexChanged" />
我的javascript用于此onchange

function verifyPendingSave(ctrl) {
    if ($("#hfSaveFlag").val() == 'true') {
        alert('You have pending changes on the page.');
        return false;
    } else {
         __doPostback(ctrl, '');
         return true;
    }
}
我的意图是,如果隐藏标志的值为true,我将显示警报、抑制回发并选择之前选择的值。如果为false,则执行回发

我看到了警报,但它没有停止回发,尽管我返回了
false

我的else部分从不进行
postback
。我在这一部分中看到了控件id和实际控件,但我想因为它在gridview中,所以它可能无法找到“甚至到
回发”
。我确信不知何故我错过了一些非常琐碎的事情

else {
    alert(ctrl.id);
    var control = document.getElementById(ctrl.id);
    __doPostback(control, '');
    return true;
}

请查找下面的代码,只需从javascript中删除else部分

function verifyPendingSave(ctrl) {
            if ($("#hfSaveFlag").val() == 'true') {
                alert('You have pending changes on the page.');
                return false;
            }
                return true;
        }
您的onchange函数在下拉菜单中调用如下

由于返回,doPostBack将永远不会被命中

onchange="if(!verifyPendingSave()) return false;" 

我希望这能有所帮助

我认为这是由于下拉列表声明中的
runat=“server”AutoPostBack=“true”
造成的。我不确定,但尝试一下这个“ddlRFP.Attributes.Add”(“onchange”,“return verifyPendingSave(this)”;)@好奇的德夫-给你!!看起来它在工作。但是,selectedvalue不会恢复到原来的状态。如何确保更改的值也在视图中重置?@Curiousdev-没关系;无论返回的值是多少,它总是停止回发。您完全正确。成功了。不过,下拉列表中的选定值不会恢复到原来的状态。虽然警报发出时未发生回发,但仍会将该值设置为新值。我是否需要以某种方式捕获javascript中的旧值并重新分配,使其看起来没有改变选择?@techspider ohh是的,很抱歉,我刚刚丢失了您在评论中提出的问题,是的,是的,你必须在一些隐藏的字段中保存以前的值,或者动态地保存以前的值以供参考。请找到这里是焦点方法,我们动态地设置以前的值,如果执行返回false,我们将该值设置为下拉列表。如果我为值重置编写jQuery change,为回发编写javascript onchange,两者都会执行吗?如果是,有执行顺序吗?删除onchange jquery函数,fiddle只是一个例子,只是更新了一个而已。jquery函数需要将set previous值添加到hiddenfield中,如果hfSaveFlag为true,则将该隐藏字段值设置为dropdown我尝试了各种选项,但始终无法保留该值
function verifyPendingSave(ctrl) {
            if ($("#hfSaveFlag").val() == 'true') {
                alert('You have pending changes on the page.');
                return false;
            }
                return true;
        }
onchange="if(!verifyPendingSave()) return false;"