jQuery. birden çok kez fireing canlı!

2 Cevap php

Selamlar Guru Bu açıklamak biraz zor, ama ben bunu bir deneyeyim.

JQuery. (Canlı) işlevine ilişkin bir sorum var. Ben burada örnek basitleştirmek için gidiyorum. Ben farklı bir sayfa "process.php" tarafından dinamik olarak üretilen çapa bağlantıları ile doldurulan bir kap "# display_files_container" vardır bir sayfa "index.php" var. Bağlantılar aynı yüklenir <div> bu bağlantılar bu bağlantının niteliklerine dayanarak seçildiğinde. Örnekler:

INDEX.PHP

<html>

<head><title>index.php</title>

<!-- this function below loads process.php and passes it the dirid variable via post.  I then use this post variable inside of process.php to pull other links from the database -->

<script language="text/javascript">
     $('.directory').live("click", function() {
          $('#display_files_container').load('plugins/project_files/process.php', {dirid: $(this).attr('dirid')});
     });
</script>

</head>

<?php 
/*This code initial populates the link array so we have the first links populated before the users clicks for the first time*/
some code to fetch the $current_directory_list array from the database initially....
>?

<body>
<div id='display_files_container'>

<?php

/*Cycle through the array and echo out all the links which have been pulled from DB*/
for($i=0;$i<$current_directory_count;$i++) {
  echo "<a href='#' class='directory' dirid='".$current_directory_list[$i]['id']." '>".$current_directory_list[$i]['directory_name'].
  "</a> ";
}

?>

</div>
</body>
</html>

PROCESS.PHP

Bu dosya bu index.php. tıklama () yöntemi, gönderildiği sonrası değişken "$ _POST ['dirid']" dayalı veritabanından $ current_directory_list [] dizi doldurmak için kod içerir. Daha sonra yankı dışarı sonuçları ve biz # display_files_container kapta bunları görüntüler. Eğer işlemi tekrarlar bu linklere tıkladığınızda.

Bu çalışır ..... sen dizin ağacında olsa tıklayabilirsiniz ve yeni bağlantılar her zaman yükler. Ancak, istediğiniz gibi görünüyor. Yük () tek bir tıklama için üzerinde process.php dosya birçok kez. Yüklenir process.php kez sayı daha bağlantıları tıkladım artırmak gibi görünüyor. Yani, örneğin bir linke tıklayın ve kundakçı process.php 23 kez ..... Sonunda ben bir stackoverflow kayıt olacağını hayal ediyorum yüklenmiş olduğunu bildiriyor. Eğer herhangi bir fikir varsa lütfen bana bildirin. Bunu temin ederim herhangi bir yolu vardır. Yaşıyor () sadece bir kez process.php dosyasını yükler?

Thanks, -cs

2 Cevap

Ne olur, her bağlantı için yeni tıklatma olay işleyicisi bağlamak, bir bağlantıyı tıklayarak o her şey olduğunu. Belirli bir olay için birden fazla yükleyiciler olabilir, çünkü bu mümkün. Siz olay köpüren durdurmak için işleyici return false olmalıdır.

Güncelleme: Ben işleyici birden çok kez bağlı alır neden emin değilim, ama benim tahminim bu 'canlı olay' uygulamasının özel doğası ile ilgisi var olmasıdır. : Chapter Event Delegation docs bakınız

. Işleyici yaşamak için geçirilen (), bir öğeye bağlı asla; Bunun yerine,.) DOM ağacının köküne özel bir işleyici bağlar (canlı.

Başka bir çözüm bağlama kullanın () veya yerine canlı, () () tıklayın ve ajax yüklendikten sonra açıkça aramak için:

function bind_link_handler() {
    $('.directory').click(function() {
        $('#display_files_container').load('...', bind_link_handler);
    })
}

Sadece bu yüzden herkes döngü benim yeni hat ise () kodu bu gibi görünüyor yaşıyor.:

$('.directory').live("click", function() {
  $('#display_files_container').load('plugins/project_files/process.php', {dirid: $(this).attr('dirid')});
  return false;
});