1

リストが実際にフォーカスを失うまで、ドロップダウンリストの自動ポストバックを遅らせる方法はありますか?キーストロークのたびにページがポストバックされることなく、キーボードからの入力を受け入れたい。たとえば、次のコードを考えてみましょう。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem >Test1</asp:ListItem>
<asp:ListItem >Tst1</asp:ListItem>
<asp:ListItem >twotest</asp:ListItem>
</asp:DropDownList>

twotestを選択したいとします。ddlにタブで移動し、キーボードに「tw」と入力します。ただし、「t」が入力されるとすぐに、ページは自動的にポストバックしますが、「w」入力は失われます。フォーカスをリセットしても、ddlは「w」が最初の入力であると見なすため、実際には何の役にも立ちません。どんな助けでもいただければ幸いです。

4

2 に答える 2

0

それは不可能のようです。AutoPostBack = "true"を削除して、ポストバックを実行する別の方法を試す必要があります。以下の解決策を検討してください。

ドロップダウンddlCountryが変更されると、関数ddlCountry_changedが呼び出され、 btnLoadクリックをトリガーしてポストバックを実行します。ボタンbtnLoadは更新パネル内に配置されるため、ページはリロードされず、ドロップダウンにフォーカスできます。

<script type="text/javascript">
    function ddlCountry_changed() {
        document.getElementById('<%= btnLoad.ClientID %>').click();
    }
</script>

Country:
<asp:DropDownList ID="ddlCountry" runat="server" onchange="ddlCountry_changed();">
    <asp:ListItem Text="Vietnam" Value="1"></asp:ListItem>
    <asp:ListItem Text="United State" Value="2"></asp:ListItem>
</asp:DropDownList>

<asp:UpdatePanel ID="updatePanel" runat="server">
    <ContentTemplate>
        <asp:Button ID="btnLoad" style="display: none" runat="server" OnClick="btnLoad_OnClick" />
    </ContentTemplate>
</asp:UpdatePanel>
于 2013-01-08T19:03:15.497 に答える
0

ぼかしを処理するよりも少し複雑です。キーボードナビゲーションが可能になるようにonchange属性(AutoPostBack = "false")を削除し、クリック、ぼかし、またはEnterキーが押されて値が変更されたときにフォームを送信するイベントハンドラーをアタッチする必要があります。

私はこれと同じ問題に遭遇し、これを処理するためのプラグインを作成しました。https://github.com/bstruthers/AutoPostBack-Fixを確認してください。

于 2013-07-10T00:50:36.030 に答える