对于JQuery中的循环问题

时间:2009-08-25 12:40:58

标签: jquery cakephp

我正在使用JQuery,我试图在JQuery输入元素中使用Cakephp Controller返回值。

我的CakePHP控制器操作返回了两个变量 $ entries和$ attributes .. $ attributes将返回Fieldname及其类型,大小 $ entries将返回Fieldname和为Field提交的值。

两者都是数组变量 在这里,我使用

创建了对应的输入元素
             <?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; ?> 

在我创建Input元素的上面代码中,它向我展示了基于它的正确Input元素。但是当我尝试使用时,在该输入元素中 value =''?&gt;

我必须保持                     

               <?php endforeach;?>

在里面只有我可以使用

怎么做..请建议我.. 两个都是for循环我不知道如何使用它们,因为当我保持 它将创造尽可能多的次数..

   <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>

编辑: 我保留了          用于从Attributes表中重新查找字段(类型,大小,字段名称)。           用于检索那些字段条目(标签,值)......

点击编辑按钮,,,我生成的输入元素大小我从$ r ['Attribute'] ['size']得到它

$(“type ='text'style ='width:px'value =''?&gt;&gt;
”)。appendTo(“#main”); 这向我展示了正确生成的输入元素,其中包含从表中检索的正确大小..

现在在这里,即在输入元素中,我想显示我使用$ r1 ['Result'] ['value']重新获得的相应字段的值; 这是我无法将这些值显示在输入元素内部的地方。请帮助我......

2 个答案:

答案 0 :(得分:1)

不确定我是否理解你的问题,但这是我的答案:

<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>

答案 1 :(得分:0)

问题不是很明确,但这是一个建议

为什么不创建一个新的视图文件来渲染你想要附加到#main的html?
您可以将属性数组从控制器操作传递到视图文件
例如,视图可能是“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; ?>

说您的控制器是“YourController”,您调用的操作称为“YourAction” 在填充$ attributes数组并将其设置为视图变量的初始代码之后,检查请求是否为ajax。
如果是ajax请求,则只渲染较小的视图“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');
    }
    ...
}

然后你可以从javascript调用“YourAction”

<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>