2012-12-29 4 views
0

J'ai un tableau PHP d'élémentsEn utilisant une fonction jQuery dans une boucle foreach PHP

Maintenant, je voudrais créer un lien ou un bouton pour chacun des éléments du tableau, lorsque vous cliquez dessus, la valeur de tableau doit apparaître à l'intérieur un div spécifique

voici mon code:

<?php 
$array = array('apple', 'banana', 'orange'); 
foreach($array as $element) { 
?> 
    <a href="#" onclick="return false;" id="showElement"><?php echo $element; ?></a><br /> 
    <script type="text/javascript" charset="utf-8"> 
    $(document).ready(function(){ 
     $("#showElement").click(function() { 
      $("#hot").append('<?php echo $element; ?><br />'); 
     }); 
    }); 
    </script> 

    <?php 
    } 
    ?> 
    <div id="hot"></div> 

Cela ne fonctionne tout simplement pas la façon dont je voudrais que ce. Il affiche les liens séparés pour chacun des éléments du tableau, mais quand je clique sur le premier, il affiche simplement tous les trois éléments du tableau, au lieu de celui qui est prévu. Les deux autres liens ne font rien.

Toute aide serait appréciée des gars, mon approche peut même être complètement la mauvaise façon de le faire, alors s'il vous plaît me conduire à la bonne façon.

Merci

+0

réutilisant la même 'id' pour plusieurs éléments n'est pas autorisé. Si vous devez transmettre des données de PHP à JS, utilisez ' 'au lieu de' ' ''(attention aux citations). – DCoder

+0

Utilisez PHP ou JavaScript pour générer vos données. Vous ne pouvez pas mélanger les langages côté client et côté client comme ça. – Blender

Répondre

1

Qu'en est-:

<?php 
$array = array('apple', 'banana', 'orange'); 
$i=0; 
foreach($array as $element) { 
    echo '<a href="#" class="showElement" id="showElement'.$i.'">'.$element.'</a><br />'; 
    $i++; 
} 
?> 

Puis

<script type="text/javascript" charset="utf-8"> 
$(document).ready(function(){ 
    var $target = $('#target'); 
    $(".showElement").click(function(e) { 
     e.preventDefault(); 
     $target.append($(this).text()); 
    }); 
}); 
</script> 
+0

quel est le point d'ajouter «onclick» en ligne lorsque vous utilisez jQuery pour créer un gestionnaire de clic? Mélanger un script intrusif et discret n'a aucun sens – charlietfl

+0

@charlietfl Vous avez raison, j'ai écrit l'OP onclick = "return false;" mais pourrait l'enlever aussi, merci –

+0

retourner 'false' du gestionnaire jQuery clcik si – charlietfl

5

Je ne sais pas ce que vous voulez atteindre réellement, mais vous devez séparer les préoccupations [à savoir ne laissez pas php jouer avec js directement au moins].

Tenir compte injecter vos valeurs par data-* attributs, et les récupérer plus tard via jQuery comme ceci:

<?php foreach($array as $element): ?> 

    <a href="#" class="yourClass" data-value="<?php echo $element; ?>"><?php echo $element; ?></a> 

<?php endforeach; ?> 

<div id="target"></div> 

<script> 

$(function(){ 

    var $target = $('#target') 

    $('.yourClass').click(function(e){ 

     e.preventDefault() 

     $target.append($(this).data('value')) 

    }) 

}) 

</script> 

alors souvenez-vous que id attribut doit être unique et ne peut pas être répétée tout au long DOM.

+0

Je vous ai mis à jour en tant que réponse la plus raisonnable, mais vous introduisez une variable globale inutile '$ target', des points-virgules de fin manquants et n'échappant pas' $ element'. – DCoder

+1

'$ target' est mis en cache afin de ne pas l'exiger à chaque clic [bien que je puisse le déclarer local, yep], la fin [les points-virgules sont optionnels] (http://mislav.uniqpath.com/2010/05/semicolons/), et à propos de vous échapper, vous avez raison, mais cet exemple est tellement vanillé que je ne voulais pas aller plus loin - je ne vais pas attacher des choses au DOM si le contenu devait s'échapper. Merci quand même! – moonwave99

+0

+1 pour l'enregistrement dans la valeur de données –

1

Essayez cette

<?php 
$array = array('apple', 'banana', 'orange'); 
foreach($array as $element) { 
?> 
    <a href="#" onclick="return false;" id="showElement-<?php echo $element; ?>"><?php echo $element; ?></a><br /> 
    <script type="text/javascript" charset="utf-8"> 
    $(document).ready(function(){ 
     $("#showElement-<?php echo $element; ?>").click(function() { 
      $("#hot").append('<?php echo $element; ?><br />'); 
     }); 
    }); 
    </script> 

    <?php 
    } 
    ?> 
    <div id="hot"></div> 

Le problème est que vous liant le même id à votre fonction append. J'ai changé vos noms d'identification. Vous pouvez simplement les changer en utilisant

$("#showElement-<?php echo $element; ?>") 

Donc ils obtiennent un nom d'identifiant différent de toute façon.

+0

Merci beaucoup!cela a beaucoup aidé :) –

Questions connexes