1

これは私の ASP.NET ページの一部です。

<asp:DropDownList ID="DropDownList1" runat="server"  
            OnChange="return ListChange(this.value)" 
            onselectedindexchanged="DropDownList1_SelectedIndexChanged1" 
            AutoPostBack="True" >
            <asp:ListItem Selected="True">Today</asp:ListItem>
            <asp:ListItem>Yesterday</asp:ListItem>
            <asp:ListItem Value="1">Specific Day</asp:ListItem>
            <asp:ListItem>All Time</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtDate" runat="server"></asp:TextBox>

ここにJavascriptがあります。

function ListChange(txtVal) {
   if (txtVal != 1 ) {
       document.getElementById("txtDate").setAttribute("style", "visibility:hidden;");
       return true;
   }
   else {
       document.getElementById("txtDate").setAttribute("style", "visibility:visible;");
       return false;
   }
}

ここでの目的は、ユーザーが選択したオプションに従って特定のデータを表示することです。特定の日オプションでは、javascript を介して日付を挿入するためのテキストボックスがユーザーに表示されます。ただし、onselectedindexchangedサーバーを呼び出すイベントも発生します。「特定の日」オプションが選択されたときにイベントを停止したいが、他のオプションが選択されたときに実行したい。

OnChange="return ListChange(this.value)"ボタン付きのフォームを使用する場合に使用されるように、コードはイベントを停止していません。

4

5 に答える 5

0

2つの別々の関数を同時に呼び出す必要はありません。これは、ほんの数行でトリックを実行するjqueryコードです。

$(document).ready(function(){
    $('#DropDownList1').change(fnction(){
        if($(this).text() != 'Specific Day') {
          document.getElementById("txtDate").setAttribute("style", "visibility:hidden;");
           return true;
        } else {
          document.getElementById("txtDate").setAttribute("style", "visibility:visible;");
          return false;
        } 
    });
});
于 2012-09-18T09:54:16.837 に答える
0

デフォルトでは、AutoPostBack = trueを指定すると、ASP.Netはポストバックします。

戻り値は考慮していません。

以下は、実行時にレンダリングされるコードです。settimeoutを使用し、フォームの送信に_doPostBackを実行します

onchange="return ListChange(this);setTimeout(&#39;__doPostBack(\&#39;ctl00$MainContent$DropDownList1\&#39;,\&#39;\&#39;)&#39;, 0)"

Page_IsValid = falseのようなフラグを設定して、フォームの送信を停止することを検討する必要があります。

于 2012-09-18T09:58:01.773 に答える
0

.net コードを使用して表示と非表示を行うことをお勧めします。

たとえば、VB.net

次のコードを DropDownList1_SelectedIndexChanged1 サブに配置します。

   If DropDownList1.SelectedValue = "1" Then
        txtDate.Visible = True
    Else
        txtDate.Visible = False
    End If

クリック/変更イベントで3つ異なるのではなく。

次に、JS と on change および on client click イベントを削除し、onselectedindexchanged="DropDownList1_SelectedIndexChanged1" のままにしておきます。

アップデート:

コード内の一部のイベントのポストバックを回避したい場合は、次のようにします。

isPostBack = True の場合

//フォームに入力しないでください

そうしないと

// フォームに入力する

終了条件

于 2012-09-18T09:44:35.987 に答える
0

使用できるオプションの 1 つです。

  1. 選択したインデックス変更イベントをマークアップから削除します。
  2. 変更イベントで、検証が正しく実行されたかどうかを確認します。
  3. 彼らがmake ajax requestを実行した場合は、あなたのことをしてください。
于 2012-09-18T09:44:58.200 に答える
0

最初に、JavaScript 関数にどのような値が入っているかを確認してください。

選択した値が表示されない場合は、次のコードを使用します

var index = document.getElementById(selectItem).selectedIndex;

    alert("value =" + document.getElementById(selectItem).value);
    alert("text =" + document.getElementById(selectItem).options[index].text);

またはjQueryを使用して

$("#yourdropdownid オプション:選択済み").text();

于 2012-09-18T10:27:45.527 に答える