質問
jQuery .loadメソッドを使用してすべてのWebサイトページをロードしようとしているので、私のWebサイトは次のようになります。
<script type="text/javascript">
$(function() {
$('.link').bind('click', function(e) {
var page = $(this).attr('href');
$('#site').addClass('loading');
$('#content').load(page, function (){
$('#site').removeClass('loading');
});
e.preventDefault();
return false;
});
<a href="test.php" class="link">Test</a>
このコードでは、class =&quot; link&quot;を取得するすべてのリンクdiv #contentにページをロードします。 正常に動作します!問題はありませんが、class =&quot; link&quot;を使用すると、test.phpをロードするときにリンク、ボタン、その他何でも、それは機能せず、新しいページは#contentの外にロードされます。
すでに、これを新しくロードされたファイルにコピーしようとしましたが、機能しません。ヒントがありますか?
ありがとう
解決
これは、イベントをバインドすると、その時点でDOMにある要素にのみイベントがバインドされるためです。そのため、後で新しいイベントを追加しても、以前に添付したイベントにバインドされることはありません。 jQuery 1.3を持っていると仮定すると、 live と呼ばれる組み込み関数があります。コード>
。これにより、イベントを現在および将来のすべての要素にバインドできます。すべてのイベントをサポートしているわけではありませんが、 click
はサポートしています。
それを念頭に置いて、これを置き換えるだけです:
$('.link').bind('click', function(e) {
これで:
$('a.link').live('click', function(e) {
(可能な場合はタグを指定する方がはるかに効率的であるため、セレクタにa。を追加しました)
jQuery 1.3がない場合は、できるだけ早くアップグレードする必要があります。できない場合は、 livequery プラグインを確認してください。あまりエレガントではありません。または、アクションをバインドして、新しいデータをロードするたびにそれを呼び出す関数を使用することもできます。ただし、すべてを考慮すると、jQueryの live
がこれを行うための最良の方法です。