私の JavaScript 関数がフォーム要素の ID と競合するのはなぜですか?

Barbara Streisand
リリース: 2024-11-26 19:39:15
オリジナル
332 人が閲覧しました

Why Does My JavaScript Function Conflict with a Form Element's ID?

JavaScript 関数名が要素 ID と競合します

問題:
JavaScript では、関数に要素IDと同じ名前。ただし、場合によっては、これによりエラーが発生する可能性があります。次の 2 つのコード スニペットを考えてみましょう:

// Works as expected
function border(border) { alert(border); }

const select = document.getElementById('border');
select.addEventListener('change', () => border(select.value));
ログイン後にコピー
// Fails with "not a function" error
function border(border) { alert(border); }

const form = document.getElementById('border');
form.addEventListener('change', () => border(form.value));
ログイン後にコピー

最初のスニペットは機能するのに、2 番目のスニペットは失敗するのはなぜですか?

解決策:
この問題この問題は、JavaScript バージョン 1.0 ~ 1.3 で導入されたレガシー機能が原因で発生します。フォーム要素がフォームの一部である場合、フォーム要素はフォームのプロパティを継承します。これらのプロパティの 1 つは要素の名前であり、要素の参照にも使用できます。

2 番目のスニペットでは、関数名「border」が同じ名前のフォームのプロパティと競合します。イベント リスナーがトリガーされると、JavaScript はフォームの "border" プロパティを関数として呼び出そうとしますが、失敗します。

W3C DOM レベル 2 HTML 仕様によれば、要素には、次を使用して名前または ID によってアクセスできます。括弧プロパティ アクセサー構文。ただし、古いブラウザではこの機能がフォーム コントロールに拡張され、ドット表記を使用して名前または ID でコントロールにアクセスできるようになりました。

競合の防止:
この問題を回避するには、関数名が要素 ID や他の JavaScript プロパティと競合しないことを確認する必要があります。さらに、document.querySelector() などのより具体的なメソッドを使用して要素を見つけることもできます。

以上が私の JavaScript 関数がフォーム要素の ID と競合するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート