2011-10-28 9 views
1

私は、イメージと、イメージの下の前後のリンクがAJAXを使用して再配置されるイメージギャラリーを持っています。私はここで作業するためのリンクをユーザーがJS(AJAXメソッドが使用されるように)を持っているときにはしたくないのですが、初めてページが読み込まれたときだけ、この作業が行われます。.preventDefault()は最初のクリックでのみ動作します

これは私が働いてリンクを停止するページに持っているコードです -

/** Prevent the default links from working when clicking on an ajax link */ 
$('#attachment-body a').click(function(e){ 
    e.preventDefault(); 
}); 

そして、ここでのリンクのいずれかの一例である - 私はあることを推測している

<a href="<?php echo get_permalink($attachment->ID); ?>" title="<?php echo $attachment->post_name; ?>" rel="attachment" onclick="set_centre_image(<?php echo $attachment->ID; ?>, <?php echo $value_for_writing; ?>)"> 
    <img src="<?php echo $img_src[0]; ?>" /> 
</a> 

これはAJAXでデフォルト設定を無効にする必要がある要素と関係がありますが、その場合はその周りに道があります。それが事実でない場合、誰が私が間違っていることを知っていますか?

ありがとうございました。

答えて

5

要素が置き換えられると、クリックハンドラがゴミ箱になります。イベントの委任を利用することで、この問題を克服することができます。私は.delegateの使用をお勧め:

$('#attachment-body').delegate("a", "click", function(e){ 
    e.preventDefault(); 
}); 

http://api.jquery.com/delegate/

+0

ありがとうカリム、それはほとんどのように思われるが、IEでは#添付本体の最初のリンクは、ページ全体をリロードしていません。他のリンクは、コンテンツがAJAXでリフレッシュされる前に 'prevenDefault()'コマンドを無視したevernです。他のブラウザはすべて正常です。ありがとう。 –

1

AJAXリクエストは、新しいDOM要素を追加しますか?もしあなたがこれを試すことができます:

+0

'attachment-body'は既にページにあります。最初にコンテンツが空になった後、AJAXコンテンツが再生成されます。しかし、私が修正しようとしているIEの小さなエラーを除いて、あなたのサンプルを取り出し、ロードを停止したいすべての要素に対して繰り返すことは、すべてのブラウザで機能しているようです。ありがとう。 –

関連する問題