2011-07-28 16 views
1

ここで私が知っている問題は、ページ内に複数のページがあり、編集クラスのリンクを複数回クリックすると、連続して同じファイルがバブルしてロードされるためですこれを解決するより良い方法を知りたいclickイベントの複数の実行を防止するためにJqueryのDOMをバブリング

$('.edit').live('click', function(e) { 
    e.preventDefault(); 
    var contentPageID = $(this).attr('id'); 
    $('div.right_content').load('modules/forms/edit/contentpages.php?contentPageID=' + contentPageID); 
}); 
+1

あなたの質問を誤解している可能性があります。最初のクリック後にリンクが機能しなくなるようにしたいのですか、ある種のイベントのバブリング/伝播のために何度も起こっているイベントですか? – aepheus

+0

イベントは何らかのイベントバブリング/伝播のために2回以上起こっていますが、ShankarSangoliの回答は私のコードで働いていました。 –

+1

イベントを複数回アタッチしている可能性はありますか?このイベントが付いているHTMLも投稿できますか? – aepheus

答えて

2
e.stopPropagation(); 

return false; 
2
var b = 0; 

$('.edit').live('click', function(e) { 
    e.preventDefault(); 
    if(b==0){ 
    var contentPageID = $(this).attr('id'); 
    $('div.right_content').load('modules/forms/edit/contentpages.php?contentPageID=' + contentPageID); 
} 
b++; 
}); 
+3

次回に何が起こるのですか?バブリングを防ぐためにグローバル変数を持たせるのは悪い考えです。 – aepheus

2

、初めての後unbindそれは:

$('.edit').live('click', function(e) { 
    e.preventDefault(); 
    var contentPageID = $(this).attr('id'); 
    $('div.right_content').load('modules/forms/edit/contentpages.php?contentPageID=' + contentPageID); 
    $('.edit').unbind('click'); 
} 
+0

それを試しましたが、それでも同じことをしました。 –

2

この

0123をお試しください
$('.edit').live('click', function(e) { 
    e.preventDefault(); 
    var contentPageID = $(this).attr('id'); 
    if($('div.right_content').data("currentPage") != contentPageID){ 
    $('div.right_content').data("currentPage", contentPageID).load('modules/forms/edit/contentpages.php?contentPageID=' + contentPageID, 
    function(){ 
     $('div.right_content').data("currentPage", null); 
    }); 
    } 
}); 
+1

@Jeff - これを試しましたか? – ShankarSangoli

+0

はい私はそれらのすべてを試しました、これは私のコードで動作した1です。ありがとうございました。 –

+1

この回答の問題は、1が読み込まれているため、ユーザーがページ1から2にすぐにヒットし、ページ2が読み込まれない場合です。 – aepheus