- PR -

Submitボタンのクリックイベントが発生したりしなかったり・・・

1
投稿者投稿内容
nday
会議室デビュー日: 2002/11/20
投稿数: 15
お住まい・勤務地: 埼玉
投稿日時: 2003-09-22 12:51
質問です。
ちょっと前に似たスレッドがあったのですが、知りたいことが違いましたので
新しくスレッドを立てさせて頂きました。

テキストボックス上でEnterを押せばフォームがSubmitされると思います。
この時、ページによってSubmitボタンの『クリックイベント』が発生したり、
しなかったりするのですが、どういう違いか解る方いらっしゃいますでしょ
うか?
ずっとEnterによるサブミットでクリックイベントが発生していたのですが、
今回新規に作ったページで急に発生しなくなりました。ページの内容はテキ
ストボックス一つとWebコントロールのbuttonひとつだけです。

そのほかの状況は次のようになっています
・VisualStudio.NET 2002を使用しています
・asp:buttonを使用しています
・Enterでイベントが発生する場合、複数のSubmitボタンがある場合はForm
 タグの一番最初にあるボタンのクリックイベントが発生します
・Enterではイベントが発生しない場合、ボタンを直接クリックすればイベン
 トは発生します
・テキストボックスにカーソルを合わせると、サブミット対象のsubmitボタ
 ンが縁取られます
・どちらもEnterによるサブミットでPage_Loadイベントは発生しています

HTMLソースを見比べてもみたのですが、それらしい違いが見当たりませんでした。
ホトホト困っています。どなたかご教授ください。よろしくお願いします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-09-22 13:00
サーバ側の作りで違うんじゃないかな。
例えばこんなんとか。

http://homepage3.nifty.com/dotnetfan/web/web11.html

ボタンのイベントを拾ってるのか、PostBackイベントを拾ってるのかで
当然挙動は違いますよね。
nday
会議室デビュー日: 2002/11/20
投稿数: 15
お住まい・勤務地: 埼玉
投稿日時: 2003-09-24 10:23
お返事遅くなってすいません。ご返答ありがとうございます。

小野さんのサンプルの動作を確認させて頂きました。
動作は、全くこれと同じ状態です。
しかし、私の場合ButtonにはどちらもOnclick属性を付けていません。
それにも関わらずTextboxでEnterキーを押すとClickイベントが発生します。
幾つかのページがあるのですが、9ページがClickイベント発生し、最後に作った
1ページだけClickイベントが発生しない状態です。
ですので、どちらかというとデフォルトではClickイベントが発生するものだと
思っておりました。

小野さんのサンプルを試していて、Clickイベントが発生するページと
発生しないページの相違点に気付き、それを試したところ新しいことが解りました。
それは「Textboxが一つしかない場合はEnterキーではClickイベントが起こらない」
逆に言えば「Textboxが二つ以上あればEnterキーでClickイベントが起こる」
という嘘みたいな話になります。

再現方法は、
1.VS2002(.NET Framework1.0)を使用します
2.aspx側にasp:Textbox二つ、asp:buttonを一つ配置します
3.デザインビューでasp:buttonをダブルクリックして、
  aspx.cs側にbuttonのClickイベントハンドラを追加します
4.EnterキーによるサブミットでClickイベントが起こります
5.Textboxを一つ削除します
6.EnterキーによるサブミットではClickイベントが起こりま
  せんが、ボタンを直接クリックすればイベントが発生します

本当に嘘みたいな話ですが、私の環境では簡単に再現します。
自分の勘違いではとも思うのですが、再現方法も単純な為、見落
としもなさそうなのです。
もし同じ環境をお持ちでしたらお手数ですが試してみて頂けません
でしょうか。
よろしくお願いします。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-09-24 10:34
ども、ほむらです。
引用:

それは「Textboxが一つしかない場合はEnterキーではClickイベントが起こらない」
逆に言えば「Textboxが二つ以上あればEnterキーでClickイベントが起こる」
という嘘みたいな話になります。



ちょっと、見かけたというサイトを忘れてしまったのですが。。。
たしか、仕様(バグ?)だったと思います。
今手元にはieしかないのですが。。。
ネットスケープ系だったら発生しなかったような。。。。(適当かも)
nday
会議室デビュー日: 2002/11/20
投稿数: 15
お住まい・勤務地: 埼玉
投稿日時: 2003-09-24 10:45
ほむらさん>
素早いご返答ありがとうございます。
今、Netscape6.2で確認をとりましたらClickイベントが呼ばれました。
IEでは呼ばれません。
これでやっと先に進めそうです。ありがとうございます。
重ねて質問で申し訳ないのですが、この現象の回避方法をご存知でした
ら教えて頂けませんでしょうか?
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-09-24 11:36
ども、ほむらです。
回避方法なんですがあきらめてください。としか^^;;;;;(仕様ですからw)

スクリプトが有効になっていることが条件ですが
submitボタンを使用せず普通のButtonにしてしまうとか。
明示的にTextBoxの方でonEnter(?)をフックしてあげるとか位しかないのでは?

ちなみに、僕は前者 普通のボタンを使用する形にしています。
コード:
<input type="Button" value=" 送 信 " language="javascript" onClick="form.submit(); return true;" />
といった感じです。まぁイメージボタンを使用したほうが自然かもしれませんが

nday
会議室デビュー日: 2002/11/20
投稿数: 15
お住まい・勤務地: 埼玉
投稿日時: 2003-09-24 14:34
ほむらさん>
ご説明ありがとうございます。
私の場合、EnterキーによるサブミットでButtonのClickイベントを
起動したいので、サーバーコントロールを使用する必要があります。
この場合は良い迂回策が見つかりませんでした。
さらにValidatorも使用しているので複雑になりそうですが、力技を
駆使してがんばってみます(Javascriptでbutton.clickなど)。

ご助言ありがとうございました。
スマートな方法が見つかりましたら投稿させて頂きます。

あー、最後まで自分の間違いだと疑わざるを得なかった、この嘘のよ
うな仕様(ばぐ)が憎い。
1

スキルアップ/キャリアアップ(JOB@IT)