2

初めての質問...私のページのこのリンク

<a onclick="$('#mainbody').load('pages/login.php', tester());">Login</a>

このフォームを生成します

<form id="form">
    <b>Email Address:</b> <input type="email" name="usrEmail" placeholder="email address" required><br />
    <b>Password:</b> <input type="password" name="usrPass" placeholder="password" required><br />
    <input type="submit" value="Log in">
</form>

私の.jsにはこれが含まれています。

function tester(){
    $("#form").submit(function() {
        alert('Handler called.');
        return false;
    }); 
}

...フォームが送信されても​​何も起こりません。ただし、リンクを変更すると

<a onclick="$('#mainbody').load('pages/login.php', function(){$( '#form' ).submit(function() { alert('Handler called.'); return false;});});">Login</a>

...これは完璧に機能します。機能的には、名前付き関数の呼び出しとコールバック自体での定義の違いはわかりませんが、明らかにブラウザーは違います! 私は何を間違っていますか?構文ですか?タイミング?または、私はまだjQueryで自分の道を見つけています.#form AFTERを参照するイベントハンドラを呼び出しているにもかかわらず、関数が最初に作成されたという事実がそれを無視するからですか?

4

3 に答える 3

4

tester関数への呼び出しの結果をコールバックとしてバインドしています.load(これは何もありません)。代わりにこれを行います:

$("#mainbody").load('pages/login.php', tester);

つまり、関数をコールバックとして使用します。

于 2013-02-12T00:23:25.600 に答える
0

フォーム要素は初期 DOM にないため、次のことが必要です。

  • callback に再アタッチし、 load コールバックで関数を呼び出します

  • またはそれらの変更に対応させる

    $("#form").die('submit').live('submit',function() { alert('Handler called.'); return false; });

関数を削除したことに注意してください

于 2013-02-12T00:31:18.507 に答える
0

#form AFTER を参照するイベントハンドラを呼び出しているにもかかわらず、それが存在するためですか

はい。jQueryデリゲートメソッドを調べる必要があります。

あなたが言うなら

$("body").delegate("form","submit",function(){
    alert("handeled");
});

別のソースからロードされた後に機能します。

于 2013-02-12T00:25:02.470 に答える