【问题标题】:Dropdownlist not showing previous value下拉列表不显示以前的值
【发布时间】:2012-09-27 11:08:18
【问题描述】:

我有一个 asp.net 下拉列表控件,其中 autopostback 为 false。 我已经编写了 js 代码来在下拉值更改时显示确认消息。

function ConfirmAbsent(ddlPresence) {
        if (ddlPresence != null) {
            var myValue = ddlPresence.options[ddlPresence.selectedIndex].text;
            var blnAbsent = confirm("This will mark as "+ myValue +". Please confirm clicking OK.");

            if (blnAbsent) {
                return true;
            }
            else {
                return false;
            }
        }
    }

并将此属性添加到下拉列表中,如下所示

ddlUserPresence.Attributes.Add("onchange", "if (!ConfirmAbsent(" + ddlUserPresence.ClientID
                    + ")) return; else __doPostBack('"
                    + ddlUserPresence.UniqueID + "', '');");

当我单击确定按钮时,它回发页面正常工作,但是当我单击取消按钮时,它没有显示以前的值,而是显示当前值。

所以当我点击取消按钮时,它应该会显示之前的值。请帮忙。

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    如果你想阻止事件,你应该从事件处理程序中return false

    ddlUserPresence.Attributes.Add("onchange", "return(ConfirmAbsent(" + ddlUserPresence.ClientID +"));"); 
    

    您还传递了 DropDownList 的 ClientID,但您没有使用它来查找控件。所以你应该使用document.GetElementById

    function ConfirmAbsent(ddlPresenceID) {
        var ddlPresence = document.GetElementById(ddlPresenceID);
        if (ddlPresence != null) {
    

    请注意,您可以使用 defaultValue 来获取在服务器端为 TextBoxes 设置的初始值。

    【讨论】:

    • @akeeseth:AutoPostback 不是事件。下拉列表只会在AutoPostback="true" 和客户端处理程序返回 true 时立即回发。所以如果你从onchange返回false,下拉列表将不会回发。
    • 一旦 onchange 触发,阻止选择为时已晚。您必须记住 onchange 之前的选择并将其重新设置。如果您使用 onclick 或 onfocus,您可以选择当前索引,因此当 onchange 触发时,您将拥有之前的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多