0

このシナリオでは、Javascript と ASP を使用しています。この特定のページが開くと、ドロップダウン メニューの 1 つに既に "Open" または "Closed" のステータスが表示されています。値はレコードセットの ID から取得されていることがわかります。

私が今やりたいことはこれです: 最初に読み込まれたときのページのステータスが「クローズ」で、ユーザーがそれを「オープン」に変更することを決定した場合、「再開理由」を再入力する必要があります。ドロップダウンの下にヘッダーとテキスト ボックスを表示します....

これまでに試したことは次のとおりです。 showHide() 関数を作成し、ドロップダウンの選択内に配置しましたが、何もしないため、スタックしています。どんな助けでも大歓迎です。ありがとう!

  <select name="cboStatus" id="cboStatus" style="width:200px" onchange="showHide();">                           <%
                        RSStatus.MoveFirst
                        If Not RSStatus.EOF Then
                            Do While Not RSStatus.EOF
                                %><option value='<%= RSStatus("ID")%>'
                                <%If RSStatus("ID") = RS("prjStatus") Then Response.Write "selected"%>><%= RSStatus("prjStatus")%></option><%
                                RSStatus.MoveNext
                            Loop
                        End If
                        %>           
                    </select>

上記の JS から生成される HTML は次のとおりです。

<tr id="lbReopenReason" style="display:none">
                <td bordercolor="#f0f0e4" bgcolor="#f0f0e4"><h3>Reopen Reason</h3></td>
              </tr>
              <tr id="trReopenReason" style="display:none">
                <td bordercolor="#FFFFFF" bgcolor="#FFFFFF">
                <input name="txtReopenReason" type="text" id="txtReopenReason" value="<%If (RS("reOpenReason")) <> "" Then Response.Write(RS("reOpenReason"))%>" size="100" />
                </td>
              </tr>     

Javascript:

    function showHide()
        {
            var cboStatus = document.getElementById("cboStatus");
                  var cboStatusValue = cboStatus.options[cboStatus.selectedIndex].text;
            var lbReopenReason = document.getElementById("lbReopenReason");             var trReopenReason = document.getElementById("trReopenReason");         

            //If the status of the project is Closed at the time of page load, and that status changes, then the user must enter a re-open reason.
            if ( (status == 3) && (cboStatusvalue == 'Open' )
            {
                lbReopenReason.style.display = "";
                trReopenReason.style.display = "";
                }
                  else
{
                lbReopenReason.style.display = "none";
            trReopenReason.style.display = "none";
            }
    }  
4

2 に答える 2

1

最終的にこれを次のように解決しました:

初期レコード値を設定するためのウィンドウのオンロード:

window.onload = findStatus;

    function findStatus()   
    {
        var cboStatus = document.getElementById('cboStatus');
        statusShowHide(cboStatus);      
    }

ステータスを変更するためのこのJavascriptが続きます:

function statusShowHide(obj)
{   
    var txtStatusFirstLoad = document.getElementById("txtStatusFirstLoad");                  
    var lbReopenReason = document.getElementById("lbReopenReason");
    lbReopenReason.style.display = "none";

    if (txtStatusFirstLoad.value == 3 && obj.value == 1)
    {

        lbReopenReason.style.display = "block";
    }   
}

そして、この非表示のテキストボックスを追加して、初期ステータス値をキャプチャしました。

<input name="txtStatusFirstLoad" id = "txtStatusFirstLoad" type="hidden" value="<%=RS("Status")%>" />
于 2012-07-10T16:17:53.613 に答える
1

ここには2つの問題があるようです:

1)関数は「showHide()」ではなく「statusShowHide()」と呼ばれているため、呼び出されない可能性があります。2) 関数呼び出しの後に onchange 属性に終了引用符がないため、それも同様である可能性があります。

これらの修正を試してみて、今すぐ機能するかどうかを確認してください。

編集:さらにいくつかの提案:

showHide() メソッドで次のように言います。

if ( (status == 3) && (cboStatusvalue == 'Open' )

それがいつあるべきか:

if ( (cboStatus === 3) && (cboStatusValue === 'Open' ) )

また、現在要素の値を取得している方法の代わりに:

var cboStatusValue = cboStatus.options[cboStatus.selectedIndex].text;

使用してみてください:

var cboStatusValue = cboStatus.value;
于 2012-06-01T19:26:17.817 に答える