0

私はjqueryを初めて使用しますが、すでに気に入っています(私はphpプログラマーです)。

.load()関数を使用して、コンテンツを別のページから新しいページにロードしました。コンテンツをロードできます。

ただし、新しくロードされたコンテンツのいくつかの要素にアクセスしたいのですが、これを行うことができません。

  $(document).ready(function() {

      $('#signin a').click(function() {
     var url=$(this).attr('href');
      $('#loginpostion').load(url + ' #loginform');
      return false;


       $('#closebox a').click(function() {


        $('#loginpostion').removeClass()

      return false;


      }); //end click  

新しくロードされたページから次のAタグにアクセスしたいと思います:#closebox a

「新しくロードされたコンテンツ」が現在のページのDOMの一部を形成することをJqueryに知らせるために必要なことはありますか?

4

4 に答える 4

1

ハンドラー関数から最初のreturn false;行を削除します。$('#signin a').click()これにより、2番目のクリックハンドラー(to #closebox a)がバインドされる前に実行が返されます。

于 2012-08-23T05:32:51.047 に答える
1

ページの読み込み時に存在する静的な親要素に関数を委任する必要があります。これを「バブリング」または「イベントの伝播」と呼びます。jQuery の最新バージョンでは、.on()関数を使用してこれらのアクションを実行します。

$(document).on('click', '#closebox a', function(){

    $('#loginpostion').removeClass()

     return false;
});
于 2012-08-23T05:34:47.703 に答える
1

load()非同期の ajax を使用するため、スクリプトの進行中にバックグラウンドで読み込まれます。これは、スクリプトの次の行にアクセスしよう#closeboxとしても、まだ DOM に挿入されていないため、まだ存在していないことを意味します。関数が完了するまで待つ必要があります。load()幸いなことload()に、このためのコールバック関数があります。また、return を使用するたびに、スクリプトが終了して戻るため、次のことを行う必要があります。

$(document).ready(function() {
    $('#signin a').click(function(e) {
        e.preventDefault();
        var url=$(this).attr('href');
        $('#loginpostion').load(url + ' #loginform', function() {
             $('#closebox a').click(function(e) {
                 e.preventDefault();
                 $('#loginpostion').removeClass();
             });
        });
    });
});
于 2012-08-23T05:34:55.383 に答える
1

次のように、 loadメソッドで完全なコールバック メソッドを使用することもできます。

$(document).ready(function() {
    $('#signin a').click(function() {
        var url=$(this).attr('href');
        $('#loginpostion').load(url + ' #loginform', function() {
            $('#closebox a').click(function() {
                $('#loginpostion').removeClass()
                return false;
            }); //end click  
        });
    });
});

または、delegate/live を使用することもできます (jquery 1.7 以降を使用していない場合)。現在または将来ページに存在するすべての #closebox 要素が必要な場合 (jquery と ofcouse を使用すると、id を使用できません) #closebox の) の場合、次を使用できます。

$(document).ready(function() {
    $(document).on('click', '#closebox a', click() {
        $('#loginpostion').removeClass();
        return false;
    });

    $('#signin a').click(function() {
        var url=$(this).attr('href');
        $('#loginpostion').load(url + ' #loginform');
        return false;
    });
});
于 2012-08-23T05:40:48.530 に答える