0

Ajax を介してフォームを送信しようとしていますが、関数を呼び出していませんか?

Firebug コンソールで次のエラーが表示されます。

ReferenceError: CreateUser is not defined
CreateUser()

この関数を呼び出すために使用しているボタン:

<input type="button" onclick="CreateUser()" id="RegisterUserBtn" class="btn" value="Sign Up" name="">

私の機能:

<script language="JavaScript">
    $(document).ready(function(e){

        function  CreateUser(){
            alert('CreateUser SignUp button is clicked.');
        }
    });

</script>

この問題の原因は何ですか? 関数名が見つからないのはなぜですか?

4

4 に答える 4

4

ここでは、javascript コーディングの 2 つのスタイルを混在させています。「古いスタイル」と、html コードの on-event 属性です。$(document).ready ブロックを使用した「邪魔にならない JavaScript」。私の推奨事項は、邪魔にならない JavaScript を一貫して使用することです。

HTML で onclick を使用しないでください。jQuery は、すべての Javascript を HTML コードから除外するのに役立ちます。ボタンの ID は既にあります。

<input type="button"  id="RegisterUserBtn" class="btn" value="Sign Up" name="">

したがって、jQuery は次のようになります。

$(document).ready(function(e) {
    function CreateUser() {
        alert('CreateUser SignUp button is clicked.');
    }
    $('#RegisterUserBtn').on('click', CreateUser);
});

この HTML と Javascript の分離は、「邪魔にならない JavaScript」と呼ばれます。

ここでライブデモをご覧ください: http://jsfiddle.net/bjelline/nySxm/

于 2013-04-27T07:44:48.410 に答える
2

CreateUser関数を匿名関数内に配置することにより、関数の周りにクロージャーを作成しています。CreateUser含まれている関数のスコープに対して「ローカル」であり、onclick イベントが定義されているグローバル スコープには公開されません。

$(document).ready関数をブロックの外に出すだけです。

于 2013-04-27T07:44:30.213 に答える
1

jqueryを使用している場合は、代わりにこれを試してください

<script language="JavaScript">
    $(document).ready(function(e){

       $("#RegisterUserBtn").click(function(){
            alert('CreateUser SignUp button is clicked.');
        });
    });
</script>

お役に立てれば

于 2013-04-27T07:47:19.920 に答える
1

CreateUserクリックイベントで関数を実行したい場合は、関数を削除$(document).readyしてタイトル内で関数を宣言してください。内部の関数 $(document).readyは、コンテンツのロード後にロードされます。あなたのhtmlは関数宣言の前にロードされます。

または、関数で jquery使用することもできます。

$(document).ready(function(e) {

   $('#RegisterUserBtn').on('click', function() {
       alert('CreateUser SignUp button is clicked.');
   });

});
于 2013-04-27T07:55:20.503 に答える