0

私はこの問題を非常に長い間抱えていて、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();
                }
            }
        });
    }

これが私のDropDownListdivです:

<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を含む変数は更新されていないようです。

4

1 に答える 1

1

純粋なJSコードとjQueryコードの興味深い組み合わせがあります。問題はここにあるようです:

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

$(document).readyがトリガーされたときにこの値を保存します。
代わりに次の行を試してください。

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

注意:マスターページを使用する場合、この要素のIDは次のようになりますctl00$ddlCaseFilesNew
これを回避するには、いくつかの方法があります。指定nameまたはclass属性、およびセレクターの変更:$("[name=ddlCaseFilesNew]").val();または$(".ddlCaseFilesNew").val();
2つ目はClientIDMode="Static"、ページまたはコントロールで指定する方法です。

于 2012-10-01T15:20:58.187 に答える