2012-01-24 12 views
2

私はハイジャックのために次のjqueryを使用します。それはリンクの大部分がハイジャックすることを望んでいるが、クラス "nohijax"を持つことによって "オプトアウト"しないものを許可するので、とてもきれいです。 なぜ時折失敗するのですか?ひどいhijaxが失敗することがある

$("#content a:not(.nohijax), #footer a:not(.nohijax)").live("click", function() { 
    $.get($(this).attr("href"), function (response) { 
     $("#content").replaceWith($("#content", response));    
    }); 
    return false; 
}); 

それは私のマシン上のIE9でChromeで100%、100%に動作しますが、他のマシン上のIEで、まれに失敗しました。失敗は一貫していません。 "失敗した"マシンでさえ、ハイジャックはほとんどの場合動作しますが、突然クリックされたリンクは、古いコンテンツが新しいものに置き換えられないため「何もしない」と表示されます。 「新しいタブで開く」は常に動作し、新しいコンテンツが実際に送信されたことを示します。

ここで問題を調査しようとしました。 1つは.lot()で.not()を使用することに注意が必要ですが、私はそれが正しいと信じています。また、置き換えられた要素(ここでは、id = "content"のdiv)はbody要素の直接の子であってはいけません。それは(間に別のdivがあります)ではありません。

明白なハウラーがない場合、どうしているのかをどのようにトレースできますか? (私はjavascriptとブラウザの開発に新しいです)。ありがとうございました。

答えて

1

console.log();どのデータを返すかを知ることができます。たとえば、console.log(response)はブラウザのdevツールコンソールにデータを表示します。

ex。

$("#content a:not(.nohijax), #footer a:not(.nohijax)").live("click", function() { 
    $.get($(this).attr("href"), function (response) { 

     console.log(response); 

     $("#content").replaceWith($("#content", response));    
    }); 
    return false; 
}); 

.live関数が機能していないとしても、IE 8以降ではその機能に問題があると思われます。使用するhtmlアンカーがページ読み込み後に読み込まれない限り、.click()を使用するほうが良いかもしれません。

最新のjquery 1.7を使用している場合、.live()メソッドは廃止予定ですが、1.7を使用していない場合は代わりに.delegate()を使用することをお勧めします。 http://api.jquery.com/live/

+1

おかげで、それは右のトラックに私を入れていると私はやりました.live()の代わりに.on()を使用して少しテストします。これはjquery 1.7よりも優先されます。うまく動作しますが、私は元の文脈でそれを確認する時間がありませんでした。私は問題が解決したかどうかを報告します。 console.logのヒントもありがとう。申し訳ありませんが、私は新しいのであなたの返信をまだ投票できません。 – EyeNine

0

これは私がthese techniquesのいずれかで解決したキャッシュの問題のようです。

私はconsole.logを使用して、新鮮なコンテンツが古いものと同じであることを発見しました。ブラウザキャッシュをクリアした後、ハイジャックが機能しました。それは、Chromeで間違っていたことはありませんでした。私は、キャッシュされたコンテンツが要求されたURLと一致しているとIEがどのように考えているのか分かりません。それはとにかく今働きます。

それはここで、便利です私のスクリプトはjQueryの1.7と.on()を使用するように更新された場合には

:あなたの迅速な対応アンドレため

$(document).on("click", "#content a:not(.nohijax), #footer a:not(.nohijax)", function() { 
    $.get($(this).attr("href"), function (response) { 
     $("#content").replaceWith($("#content", response)); }); 
    return false; }); 
+0

すばらしい見た目 –

関連する問題