我正在使用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']重新获得的相应字段的值; 这是我无法将这些值显示在输入元素内部的地方。请帮助我......
答案 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>