0

jQuery アドレス (プラグイン) での JavaScript の動作がおかしい。

私はこのコードを持っています:

var handler = function(data) {
$('#conteudo').hide().html($('#conteudo', data).html()).fadeIn(500);
$.address.title(/>([^<]*)<\/title/.exec(data)[1]);
};

そして、それは機能します。完璧に。

今、私はコードを変更します:

var handler = function(data) {
$('#conteudo').fadeOut(500, function() {
    $('#conteudo').html($('#conteudo', data).html()).fadeIn(500);
});
$.address.title(/>([^<]*)<\/title/.exec(data)[1]);
};

フェードアウト効果が機能し、フェードイン後(新しいコンテンツで)。美しい!しかし、新しいコンテンツ (fadeOut 後の新しい関数の内部) を記述する方法のこの小さな変更により、ページ内のサブリンクが壊れてしまいました。

ライブの例を次に示します。

  1. この URL にアクセスしてください: http://impulse.im/clean/2/
  2. 上部のメニューで、[Contato] をクリックします。
  3. hrefロードされたコンテンツのリンク「Rafa」を見てください!
    http://impulse.im/clean/2?_escaped_fragment_=%2Fcontato%2Frafa.
    これは正しくありません。
    http://impulse.im/clean/2/#!/contato/rafa
  4. 再び: http://impulse.im/clean/2/ - [Contato] をクリックします。ページをリロードします。
  5. リンク「Rafa」は正しいものになりました。

この新しい関数 ( の後fadeOut) はコードで何をしていますか? この関数がリンクを壊すのはなぜですか?

ありがとう!

4

1 に答える 1

1

問題は、データに格納されている html が実際にページに配置される前にアドレス プラグインを呼び出していることです。$('#conteudo').html($('#conteudo', data).html()).fadeIn(500)これは、fadeOut メソッドへのコールバックとして呼び出されるように非同期で呼び出すために発生します。

このように変更します。

var handler = function(data) {
    $('#conteudo').fadeOut(500, function() {
        $('#conteudo').html($('#conteudo', data).html()).fadeIn(500);
        $.address.title(/>([^<]*)<\/title/.exec(data)[1]);
    });
};

これにより、新しいコンテンツがページに配置された後にアドレス プラグインが呼び出されます。

このように機能する前に。

ハンドラーがデータを返す -> コンテンツがフェードアウトする -> アドレス プラグインを呼び出しますが、コンテンツはまだページに配置されていません -> 500 ミリ秒後に、コンテンツを追加するコールバックが呼び出されます。

今はこうなります。

ハンドラーがデータを返す -> コンテンツがフェードアウトする -> 500 ミリ秒後にコンテンツが追加され、アドレス プラグインが呼び出される

于 2011-02-19T15:40:43.870 に答える