質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

6650閲覧

テキストボックスのautoPostBackが発生しない

susumi.K

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/12/10 13:15

編集2018/12/10 13:28

前提・実現したいこと

ASP.NETのwebアプリケーションを開発しております。

あるページで、AutoPostBackプロパティをTrueに設定したテキストボックスを使用しております。
入力してフォーカスをはずしたら、ポストバックが発生し、入力内容が変わっていればtextchangedイベントが発生する、という機能をサーバサイドで実装したいです。

発生している問題

普通にテキストボックスに値を入力してフォーカスを外すときちんとポストバックが走り、意図した通りに動きます。

問題となっているのは、
テキストボックスのオートコンプリート機能により、過去入力した履歴が入力候補候補として表示され、その中からクリックで選択して値を入力した場合は、ポストバックが発生してくれません。

履歴が表示されてその中から選択できること自体は、機能として可能であれば残しておきたいです。
履歴から選択して入力した場合も、普通に入力した時と同じようにポストバックを発生させたい、というのが実現したい仕様です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/10 13:22

使っているブラウザは何ですか?
退会済みユーザー

退会済みユーザー

2018/12/10 14:07

IE8 では検証できませんが、IE11 ではそんなことはないですが? 何かの間違いとか?
susumi.K

2018/12/10 15:05

IE11では、入力候補をクリックして値を入力した場合でも、ポストバックが起こるのですね?ありがとうございます。もしかすると、updatepanelを使用しているのも関係しているかもしれません。中途半端になってしまい申し訳ありませんが、改めて検証してみます。
退会済みユーザー

退会済みユーザー

2018/12/10 15:20

> updatepanelを使用している ← そういうの NG です。影響がありそうなものは一切排除してから検証して質問するようにしてください。ところで、TextBox.AutoPostBack の仕組みをご存知ですか? 今日は時間が遅いので明日また書きますが、ご自分でも調べておいてください。
guest

回答1

0

ベストアンサー

TextBox.AutoPostBack を true に設定すると、ASP.NET が TextBox を html にレンダリングした際、以下のように onchange 属性にポストバックするための JavaScript の関数 __doPostBack が設定されます。

<input name="TextBox1" type="text" onchange="javascript:setTimeout('__doPostBack(...)', 0)" ... />

質問者さんのケースでは IE8 によるオートコンプリートの選択では <input type="text" ... /> の change イベントが発生しないことが問題の原因だと思われます。実際、古い IE では以下の記事にあるように change イベントは発生しないそうです。

The TextChanged event of a TextBox control may not fire
if the AutoComplete feature is enabled in Internet Explorer
https://support.microsoft.com/en-us/help/873198/the-textchanged-event-of-a-textbox-control-may-not-fire-if-the-autocom

IE AUTOCOMPLETE DOESN'T FIRE ONCHANGE EVENT HANDLER
http://phdesign.com.au/programming/ie-autocomplete-doesnt-fire-onchange-event-handler/

(注:上の 2018/12/10 23:07 の私のコメントで述べたように自分の環境の IE11(Windows 10 Pro 64-bit バージョン 1809, IE11 バージョン 11.134.17763.0)ではオートコンプリートの選択で change イベントが発生します。どの IE のバージョンから変わったのかは調べてません)

対策は、上の後者の記事あるような裏技的なこと(blur にリスナをアタッチしてそれで change を fire)をするか、IE11 を使うということになると思います。

ただ、TextBox ということはユーザー入力でしょうから入力の検証は必須で、RequiredFieldValidator, RegularExpressionValidator 等を使うことになると思いますが、クライアント側での検証に問題が出るかもしれません。

実際、自分の環境の IE11 で AutoComplete と AutoPostBack の両方を有効にして試してみましたが、クライアント側での検証はかかりませんでした。(サーバー側での検証はかかります)

なので、後者の記事のような裏技的なことを試してみて、クライアント側での検証に問題が出ないかを確認し、確認出来たらそちらの方向に進むということになると思います。(そこまで試してないので可能かどうかは不明ですが)

個人的には、正解は AutoComplete または AutoPostBack のどちらかを諦めることだと思います。

投稿2018/12/11 03:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問