1. ホーム
  2. ジャバスクリプト

htmlページ jsファイル内の関数呼び出しエラー onclickは処理方法が定義されていません。

2022-02-28 19:29:26

今日、htmlタグでonclick関数を扱うと、必ずエラーが報告されます。Uncaught ReferenceError: dosave is not defined(...)

しばらく探しても何が悪いのかわからなかったのですが、ようやく書き方が間違っていたことがわかり、正しい書き方は次のようになります。

htmlを使用します。

<input type="button" value="Login Now" onclick="dosave();"/>

jsです。

dosave = function (){
        alert("Success! ");
    }

エラーの書き方は、一般的に2つの致命的なものがあります。

function dosave(){
        alert("An error will be reported!!! ");
    }

そして

var dosave = function (){
        alert("An error will be reported!!! ");
    }

なぜそうなのか、それは。

htmlページはjsファイル内の関数を呼び出すので、dosave = function (){}という形で書く必要があり、それ以外の書き方ではhtmlページが関数を検索してくれません。

<スパン ------------------------------------------------------------------ split line ------------------------------------------------------------- ---

上記は2016年11月11日のブログの元記事で、3年間とても話題になり、多くの仲間を助けたり、突き放したりしてきました。皆さんからの反応に感謝しつつ、参考になればと思い、コメントをまとめておきます。

1. これは特異な問題です。普段はvar dosave = function(){}とfunction dosave(){}を問題なく使っているのに、ある日突然動かなくなる学生が多く、当時の私もそうでした。また、HBuidlderでは問題なく動いているのに、eclipseに切り替えると動かなくなる学生もいます。

2. 関数の定義方法は、スコープが異なることを除けば、3つとも正しい。

3. var dosave = function(){}とfunction dosave(){}は同等であり、最も一般的な関数定義の方法であることが分かっています。違いは、function dosave(){}は宣言的に上げることができるのに対し、var dosave = function(){}は使う前に定義しなければならないことです。

4. dosave = function(){}の書き方は、dosave関数をグローバルスコープ関数として扱い、windowsオブジェクトを自分のスコープと同等に扱いますので、呼び出すことが可能です。

5. クラスメートが解決策を教えてくれましたが、当時は$(functiong{ })を使っていなかったので、私の場合うまくいきませんでした:。

1) funcationメソッド名() {}でメソッドを定義する。, このように書いても問題はないのですが、jsの$(functiong{ })の中にメソッドを書いてはいけません、メソッドの中にメソッドがあるのと同じなので、見つけることができません。

2) $().ready(function () {});の外側にメソッドを入れたら、ちゃんと実行されるようになりました。

6. これら3つの定義関数を記述して試してみると、不可解なエラーに遭遇したとき、アイデアの提供という意味で、お役に立てるかもしれません。

また、綿密な調査と返信をありがとうございました。さらに質問を返信していただければ、より良い回答を提供できるよう、この問題のフォローアップを続けます。ありがとうございました。