如何重置变量并重建DropDownList而不使用回发

时间:2012-10-01 15:07:21

标签: javascript asp.net

我现在已经有很长时间了,我试图通过DropDownList从一个人那里获得用户输入。它似乎第一次工作(在回发后)。但是当我尝试让用户从DropDownList中选择一个新值时,它似乎默认回到我之前选择的值。我的问题是如何获取javascript代码以将变量重新分配给当前新选择的值。如果我做回发它似乎工作,因为它得到刷新。但是我不想每次都做回发。

这是我的javascript代码:

function getCaseFiles(canMoveExpenses) {
        //create Popup with content from div
        $('#ddlFiles').dialog({
            autoOpen: true,
            height: 'auto',
            width: 'auto',
            modal: true,
            buttons: {
                "Ok": function () {
                    debugger;
                    var dropDownList = document.getElementById("ddlCaseFilesNew");
                    var newCaseDdl = dropDownList.options[dropDownList.selectedIndex].value;
                    //alert("newCaseDdl = " + newCaseDdl);

                    var oldCaseFile = $("#hidCaseFile").val();//<asp:HiddenField id="hidCaseFile">
                    //alert(oldCaseFile);

                    if (newCaseDdl != -1) {
                        moveCasefile(canMoveExpenses, newCaseDdl, oldCaseFile);
                        $(this).dialog('close');
                        $("#viewExpensesGrid").flexReload();
                    }
                    else {
                        showMessage("Error. Please Select a Value From The Lists.");
                    }
                },
                Cancel: function () {
                    $(this).dialog('close');
                    $("#viewExpensesGrid").flexReload();
                }
            }
        });
    }

这是我的DropDownList div:

<div id="ddlFiles">
    <label>
        Select new CaseFile:</label>
    <asp:DropDownList runat="server" ID="ddlCaseFilesNew" DataSourceID="dsCaseFiles"
        DataTextField="Display" DataValueField="FileID" 
        OnPreRender="ddl_PreRender" Width="300px"/>
</div>

我的函数调用此div并将其放在自定义弹出窗口中。

似乎我的包含selectedIndex的变量如果不是回发则不是更新。

1 个答案:

答案 0 :(得分:1)

你有一个有趣的纯JS和jQuery代码组合。 似乎问题在于:

var newCaseDdl = dropDownList.options[dropDownList.selectedIndex].value;

触发$(document).ready时保存此值 请尝试使用此行:

var newCaseDdl = $("#ddlCaseFilesNew").val();

注意:如果你使用母版页,这个元素的ID会看起来像这样:ctl00$ddlCaseFilesNew 有两种方法可以避免它:指定nameclass属性,并更改选择器:$("[name=ddlCaseFilesNew]").val();$(".ddlCaseFilesNew").val();
第二个是在页面或控件上指定ClientIDMode="Static"