0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

onclick属性で困った件

Last updated at Posted at 2022-02-22

onclick属性で困った件

以前、INPUTタグのonclick属性に指定したスクリプトが動かなくて原因をつかむまでに少し時間がかかったので、その時の備忘録です。

概要

下記のHTML/JavaScriptのようにSubmitされる前にonclickで何かしら処理を行いたい場合、function名を属性名と同じonclickにしていると、正常に動作しません。

onclick_test_failure.html
<!DOCTYPE html>
<HTML lang="ja">
<HEAD>
	<META charset="UTF-8">
	<TITLE>テスト</TITLE>
</HEAD>
<BODY>
<P>入力欄</P>
	<FORM>
		<INPUT type="text" id="txt">
		<INPUT type="button" value="確認" onclick="return onclick(0);" id="btn_check">
		<INPUT type="button" value="登録" onclick="return onclick(1);" id="btn_regist">
	</FORM>

	<SCRIPT>
		function onclick(val) {
			if (val == 0) {
				window.alert("確認が押されました");
			} else {
				window.alert("登録が押されました");
			}
		}
	</SCRIPT>
</BODY>
</HTML>

エラー内容

ブラウザの開発者ツールで確認してみると、コールスタックがオーバーフローしています。
Edgeの例
onclick_test_failure.jpg
無限の再帰呼び出しにでもなってしまうのかな?

対応

function名をonclick以外のものに変えます。

onclick_test_success.html
<!DOCTYPE html>
<HTML lang="ja">
<HEAD>
	<META charset="UTF-8">
	<TITLE>テスト</TITLE>
</HEAD>
<BODY>
<P>入力欄</P>
	<FORM>
		<INPUT type="text" id="txt">
		<INPUT type="button" value="確認" onclick="return check_txt(0);" id="btn_check">
		<INPUT type="button" value="登録" onclick="return check_txt(1);" id="btn_regist">
	</FORM>

	<SCRIPT>
		function check_txt(val) {
			if (val == 0) {
				window.alert("確認が押されました");
			} else {
				window.alert("登録が押されました");
			}
		}
	</SCRIPT>
</BODY>
</HTML>

修正したHTMLをブラウザで表示して、「登録」ボタンをマウスでクリックしてみると…
onclick_test_success2.jpg
無事、スクリプトが動作しました。

おわりに

この件は、改修案件で追加したfunctionの名称を既存から少し変えた際に起こったんですが、function名に予約語を使うなってことですね。
まあ、初歩的なミスだとは思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?