2009-08-25 6 views
0

J'utilise JQuery où je suis en train d'utiliser le contrôleur CakePHP a retourné des valeurs dans l'élément d'entrée JQuery ..Pour le problème de boucle dans JQuery

J'ai deux variables de retour de mon action du contrôleur CakePHP entrées $ et attributs $ .. $ les attributs retourneront le nom du champ et son type, la taille $ les entrées renverront le nom du champ et la valeur soumise pour le champ.

Les deux sont des variables de tableau Ici, j'ai créé l'élément d'entrée correspondant à l'aide

   <?php foreach ($attributes as $r): ?> 
       $("<div id= <?php echo $r['Attribute']['label'];?> ></div>").appendTo("#main"); 
       $("<input id=input<?php echo $r['Attribute']['id'];?> type= 'text' style= 'width:<?php echo $r['Attribute']['size'];?>px'value='<?php echo $attribute['Result']['value'];?>' ?> ></input><br>").appendTo("#main"); 
      $("<div id= <?php echo $r['Attribute']['type'];?> ></div>").appendTo("#main"); 
       <?php endforeach; ?> 

Dans le code ci-dessus où je crée l'élément d'entrée, il me montre l'élément d'entrée correcte sur la base it.but dans ce élément d'entrée lorsque j'ai essayé d'utiliser comme valeur = ''?>

je dois garder le

   <?php endforeach;?> 

où l'intérieur de ce que je peux utiliser le

Comment faire .. S'il vous plaît me suggérer .. puisque les deux sont pour les boucles je ne sais pas comment les utiliser depuis quand je garde il va créer comme nombre beaucoup de fois ..

<script type="text/javascript"> 
     $(document).ready(function(){ 
      $(".edi").click(function(){ 


       <?php foreach ($attributes as $r): ?> 
       $("<div id= <?php echo $r['Attribute']['label'];?> ></div>").appendTo("#main"); 
       $("<input id=input<?php echo $r['Attribute']['id'];?> type= 'text' style= 'width:<?php echo $r['Attribute']['size'];?>px'value='<?php echo $attribute['Result']['value'];?>' ?> ></input><br>").appendTo("#main"); 
      $("<div id= <?php echo $r['Attribute']['type'];?> ></div>").appendTo("#main"); 
       <?php endforeach; ?> 
       $(".edi").hide();$(".vie").show(); 
       return false; 
      }); 
     }); 
     </script> 

EDIT: Je ai gardé pour retriving les champs (type, taille, fieldName) de la table Attributs .. est pour retriving les champs que les entrées (étiquette, valeur) ...

En cliquant sur le bouton Modifier ,,, je suis générer les éléments d'entrée avec des tailles où je l'ai eu à partir de $ r [ 'attribut'] [ 'size']

$ (» 'text' type = style = 'width: px'value =' '?>>
") .appendTo (" # main "); Cela me montre la bonne génération d'éléments d'entrée avec les tailles correctes de ce qu'il récupère du tableau ..

Maintenant à l'intérieur de ce dans les éléments d'entrée je veux montrer la valeur de ce champ correspondant de ce que im retriving d'utiliser $ r1 ["Résultat"] ["valeur"]; c'est où je ne suis pas en mesure de faire ces valeurs pour montrer l'intérieur de l'entrée Elements..Please me aider ......

+0

s'il vous plaît écrire le résultat HTML/code Javascript de foreach –

+1

Envisager d'éditer la dernière partie de votre message.La phrase est incomplète.Je ne comprends pas bien pourquoi vous avez mélangé le code PHP et JS.Et quel devrait être le résultat final? – krishna

+0

A édité la publication – useranon

Répondre

1

Je ne sais pas si je comprends votre question, mais voici ma réponse:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $(".edi").click(function() { 
     <?php 
     // loop over attributes 
     foreach ($attributes['Attribute'] as $attribute): 
      // loop over results 
      foreach ($entries['Result'] as $result): 
      // determine attribute value 
      if ($result['fieldname'] == $attribute['fieldname']): 
       $attribute['value'] = $result['value']; 
      endif; 
      endforeach; 
      // build html string 
      $html = String::insert(
      '<div id=":label"></div><input id="input:id" type="text" style="width: :size px" value=":value"></input><br><div id=":type"></div>', 
      $attribute // see previous version for expanded version of this line 
     ); 
      // append it using jquery 
      echo "$('" . $html . "').appendTo('#main');"; 
     endforeach; 
     ?> 
     $(".edi").hide(); 
     $(".vie").show(); 
     return false; 
    }); 
    }); 
</script> 
0

la question est pas très claire, mais voici une suggestion

Pourquoi ne pas créer un nouveau fichier en vue de rendre le code HTML que vous voulez ajouter à #main?
Vous pouvez passer le tableau d'attributs de l'action du contrôleur dans le fichier de vue
Par exemple, la vue peut être « ViewToAppend.ctp »:

<?php foreach ($attributes as $r): ?> 
    <div id="<?php echo $r['Attribute']['label'];?>" /></div> 
    <input id="input<?php echo $r['Attribute']['id'];?>" type="text" style= "width:<?php echo $r['Attribute']['size'];?>px" value="<?php echo $attribute['Result']['value'];?>"> </input><br> 
    <div id="<?php echo $r['Attribute']['type'];?>"></div> 
<?php endforeach; ?> 

que votre contrôleur est « YourController », et l'action que vous appelé est appelé "YourAction".
Après le code initial où vous remplissez le tableau d'attributs $ et le définissez comme variable d'affichage, vérifiez si la requête est ajax.
S'il est une demande ajax, rendre seulement votre plus petite vue "ViewToAppend.ctp"

class YourController extends AppController{ 
    var $components = array(... , 'RequestHandler', ...); 
    ... 
    function YourAction(/* parameters */){ 

     /* initial code where you set up $attributes */ 

     $this->set('attributes',$attributes); 

     if($this->params['isAjax']) 
      render('/path/to/view/ViewToAppend','ajax'); 
    } 
    ... 
} 

alors vous pourriez appeler "YourAction" de javascript

<script type="text/javascript"> 
$(document).ready(function(){ 
    $(".edi").click(function(){ 

     $.ajax({ 
      url:'YourController/YourAction/...', 
      success:function(msg){ 
       $('#main').append(msg); 
       $(".edi").hide(); 
       $(".vie").show(); 
      } 
     }); 

     return false; 
    }); 
}); 
</script>