9

Internet Explorer 7 のイベントに問題があります。

2 つ以上 のフォームがあり、input[type=text]Enter キーを押すと、イベントは次の順序で発生します。

  1. 送信ボタン ( onClick)
  2. フォーム ( onSubmit)

サンプルコード:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>

1 つ しかない場合にinput[type=text]Enter キーを押すと、送信ボタンonClickイベントは発生しません。サンプルコード:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>
4

6 に答える 6

5

ボタンの onclick は、それを変更するロジックを追加していない限り、ボタンが実際にクリックされた場合 (またはフォーカスがボタンにあり、ユーザーが入力をクリックした場合) にのみ起動する必要があります。

追加のテキスト ボックスを追加すると、要素のタブ オーダーが変更される可能性がありますか (その場合、ボタンが既定のコントロールになる可能性があります)。

于 2008-08-13T00:08:17.007 に答える
3

ブラウザの黎明期から、フォーム内の単一の入力フィールドは、送信ボタンの有無にかかわらず、入力時に送信されました。これは、ユーザーが 1 つの検索フィールドからサイトを簡単に検索できるようにするためです。

フォームで JavaScript を実行する必要がある場合は、送信ボタンの onClick でスクリプトを実行するよりも、フォームの onsubmit を使用する (送信を停止するには false を返す) 方が安全です。ボタンから JavaScript を実行する必要がある場合は、type="submit" の代わりに type="button" を使用してください。

于 2010-07-07T15:19:14.290 に答える
1

Interestingly, if you click on the screen (remove the focus from the textbox) on second example with only one textbox, the event onClick fires... So it's not an expected behaviour since it only occurs when you have just one textbox and you have the focus on the textbox.
I'm afraid you've found a bug on the browser and you'll have to find a workaround, or avoid using the onClick event in that case.
I use the onSubmit event for validations because it's a "safer" event that is more likely to work on different browsers and situations.

于 2008-08-22T16:09:58.697 に答える
1

Out of curiosity, are you using a DOCTYPE, and if so, which one? I'm not saying incompatabilities with the DOCTYPE are the issue, but quirks mode is something to rule out before trying anything else.

于 2008-08-22T16:13:05.773 に答える
1

ユーザーが Enter キーを押したときにコードを実行する場合は、onSubmit ハンドラーを使用します。

ユーザーが Enter キーを押したときではなく、ユーザーがボタンを押したときにコードを実行する場合は、type="submit" 以外のボタンを使用します。

于 2008-08-12T23:43:34.903 に答える
0

2 つの入力要素がある状況を再現するために、ダミーの非表示の入力要素を含めたいと思うかもしれません。そうすれば、両方のイベントが発生します。

<FORM onSubmit="{alert('form::onSubmit'); return false;}">
    <INPUT TYPE="text">
    <input type="hidden" name="dummy">
    <INPUT TYPE="submit" onClick="{alert('buttom::onClick');}">
</FORM>

IE には、コードの互換性を改善するために行う必要がある、混乱を招く修正が多数あります。

于 2016-03-03T14:52:38.533 に答える