[解決済み】onclick/onchangeイベントからHTMLチェックボックスの値を取得する。
質問
<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" />
内部から
onClickHandler
および/または
onChangeHandler
チェックボックスの新しい状態を判断するにはどうすればよいですか?
どのように解決するのですか?
簡単に言うと
を使用します。
click
このイベントは、値が更新されるまで発生せず、必要なときに発生します。
<label><input type='checkbox' onclick='handleClick(this);'>Checkbox</label>
function handleClick(cb) {
display("Clicked, new value = " + cb.checked);
}
長い回答です。
その
change
イベントハンドラが呼び出されるのは
checked
状態が更新されました (
実例
|
ソース
を発行しないためです(コメントで Tim Büthe が指摘しています)。
change
イベントが発生し、チェックボックスのフォーカスが外れるまで、通知を積極的に受け取ることはできません。さらに悪いことに、IE では
ラベル
を更新しようとすると、古い値を取得したかのような印象を受けることがあります(ここでIEでラベルをクリックして試してみてください。
実例
|
ソース
). これは、チェックボックスにフォーカスがある場合、ラベルをクリックするとチェックボックスからフォーカスが外れてしまい
change
イベントに古い値で参加し、その後
click
が発生すると、新しい値が設定され、チェックボックスにフォーカスが戻されます。非常に紛らわしいですね。
しかし、このような不愉快なことを避けるために
click
の代わりに
DOM0ハンドラ(
onxyz
属性) について質問されたからですが、念のため、私は一般的に、コードでハンドラをフックすることをお勧めします (DOM2 の
addEventListener
または
attachEvent
を使用するよりも、古いバージョンの IE で
onxyz
属性を使用します。これにより、同じ要素に複数のハンドラをアタッチすることができ、すべてのハンドラをグローバル関数にすることを避けることができます。
この回答の以前のバージョンでは、このコードを
handleClick
:
function handleClick(cb) {
setTimeout(function() {
display("Clicked, new value = " + cb.checked);
}, 0);
}
目的は、クリックが完了してから値を見ることだったようです。私が知る限り、そうする理由はありませんし、なぜそうしたのか見当もつきません。値が変更されるのは
click
ハンドラが呼び出されます。実は、この仕様は
については、かなり明確です。
. がないバージョンは
setTimeout
は、私が試したすべてのブラウザで(IE6でも)完全にうまく動作します。私が考えていたのは、いくつかの
その他
プラットフォームでは、イベントの後まで変更が行われません。いずれにせよ、HTMLのチェックボックスでそのようなことをする理由はないでしょう。
関連
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] どのDOM要素にフォーカスがあるかを調べるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー