JQuery işlevinin bir parçası olarak PHP değişken çalışmaz, ama düz metin yok

4 Cevap php

Benim PHP dosyasında aşağıdaki jQuery kodu var (edited Jan 19 2010 @ 10:40 MST):

<?php
   $count = 0;
   foreach($attachments as $attachment) :
      echo '<script type="text/javascript">
               $(\'#a_'.$count.'\').click(function() {
                  $(\'#d_'.$count.'\').show(200);
               });

               // if "no" is clicked
               $(\'#d_'.$count.' .no\').click(function() {
                  $(\'#d_'.$count.'\').hide(200);
               });

               // if "yes" is clicked
               $(\'#d_'.$count.' .yes\').click(function() {
                  $(\'#d_'.$count.'\').hide(200);

                  // update database table -- this is why I need the script inside the for loop!
                  var jsonURL = \'http://path/to/update_db_script.php\';
                  $.getJSON(jsonURL, {\'post_id\' : '.$attachment->ID.'}, function(data) {
                     alert(\'Thank you. Your approval was received.\');
                  });
                  $(\'#a_'.$count.'\').replaceWith(\'<span>Approved</span>\');
               });
            </script>';

      echo '<li>';
         if($attachment->post_excerpt == 'approved') {
            // Check the proof's status to see if it reads "approved"
            echo '<span>Approved</span>';
         } else { ?>
            // If not yet approved, show options
            <a class="approve" id="a_<?php echo $count; ?>" href="#">Click to Approve</a>
            <div class="confirm-approval" id="d_<?php echo $count; ?>">
               <p>Please confirm that you would like to approve this proof:</p>
               <a class="yes" href="#">Yes, I approve</a>
               <a class="no" href="#">No, not yet</a>
            </div><?php
         } ?>
      </li>
   <?php $count++;
endforeach; ?>

The page in question is available here. (Bu benim sorunum değil) bağlantılar çalışmıyor "onaylamak için tıklayın".

Ben kaynağını görüntülediğinizde, PHP değişkenleri jQuery içinde doğru yankılandı görünmektedir:

<script type="text/javascript">
   $('#a_0').click(function() {
      $('#d_0').show(200);
   });
   ... etc ...
</script>

Bu doğru görünüyor, ama ben herhangi bir bağlantıları tıkladığımda hiçbir şey olmuyor. Bununla birlikte, when I replace the PHP echo statements with plain numbers (0, 1, etc.) the click functions work as expected.

Soran olabilir: why on earth do you have this inside a for loop? nedeni attachment->ID değişkeni almak ve harici bir PHP komut dosyası geçmek gerekir olmasıdır. Birisi "onaylama" ve teyit tıkladığında, dış komut eki-> kimliğini alır ve "onaylanmış" okumak için bir veritabanı değerini günceller.

Why won't the click function fire when PHP is in place? İşte burada daha büyük bir güçle bir tür (örneğin, barındırma sınırlama) var mı, ya da ben PHP ve JavaScript nasıl etkileşim temel bir parça eksik?

4 Cevap

Eğer HTML gidermek için onun biraz zor sonrası vermedi beri.

Birincisi, bir çalışma neden emin değilim ve diğer kodu beri doğru görünüyor çıktısı değildir. Her iki şekilde de, hala bazı değişiklikler yapmak istiyorum. d_1, vb içine a_0, a_1, vb ve d_0 Taşı id bir yerine nitelik sınıf:

<div><a href="#" id="a_0" class="approve">Click Me</a></div>
<div class="confirm_approval" id="d_0">Show Me</div>
<div><a href="#" id="a_1" class="approve">Click Me</a></div>
<div class="confirm_approval" id="d_1">Show Me</div>

Şimdi, bunun yerine PHP bir döngü içinde kod çıktısı, sayfanızda bu jQuery kodu once yerleştirin:

$(document).ready(function(){
   $("a.approve[id^='a_']").click(function(e){
      var id = this.id.replace('a_',''); // Get the id for this link
      $('#d_' + id + '.confirm-approval').show(200);
      e.preventDefault();
   });
});

Bu kod, bir id o starts with a_ sahip olan approve sınıfı ile bir a elemanı bulur. Bu tıklandığında, o id kapalı sayısını kapmak a_0 = 0 ve confirm-approval elemanı bulmak ve göstermek için bu kimliği kullanır.

Javascript istemci üzerinde çalıştırmak ve PHP kullanarak veya komut dosyası oluşturulmuş olup olmadığını bilmenin bir yolu vardır beri, ben belirli bir parçası, bir yabani kaz kovalamaca olduğunu düşünüyorum ...

When I replace the PHP echo statements with plain numbers (0, 1, etc.) the click function works as expected.

Bunu tekrar ve bir tarayıcıda görünüm kaynak kullanarak gerçek çıkışını karşılaştırın. Ben çalışma ve PHP tarafından üretilen bunlardan biri dışında başarısız komut arasında bir fark olduğunu bulmak bahse girerim.

Bu sorunun jQuery seçicileri olduğunu görünüyor. Bunun yerine dinamik PHP kod bir çıkış ile birden çok nesne üzerinde click() olaylar, bu sınıf ile nesnelere sadece tek bir sınıf seçici ve bağlama kullanın bağlama. Ve bunları benzersiz yapmak için id niteliğini belirtebilirsiniz.

Garip bir şey çok script etiketi ve sahip olmaktır

$(document).ready(function()

döngüde. Bu herhangi bir sorun neden olmadığını bilmiyorum, ama bir kez yeterli, tabii çok verimli değil.