【发布时间】:2018-09-14 14:19:13
【问题描述】:
我将要展示的可能是现存最可怕的代码,所以请做好准备。我是 PHP 新手,收到了一个 CodeIgniter 项目。我们开始:
在我的edit_article 视图中,我动态生成<input> 字段并通过将它们作为数组发布来使控制器可以访问它们,注意name="pricelevel_checked_array[]":
<form id="form-work" class="form-horizontal" role="form" autocomplete="off" method="post">
<!-- excluded code to display form content -->
<?php
$pricelevel_array = array();
$count = 0; ?>
<?php foreach($array_used_for_loop as $item_used_for_loop): ?>
<?php $article_group_price = ""; ?>
<!-- excluded code to fill $article_group_price -->
<div class="col-sm-2">
<div class="checkbox">
<span class="bg-transparent left">
<input type="checkbox" data-init-plugin="switchery" data-size="small" data-color="primary" id="<?=$count?>"
<?php if($article_group_price !== ""): ?>
<?php array_push($pricelevel_array, 1); ?>
checked="checked"
<?php else: array_push($pricelevel_array, 0); ?>
<?php endif; ?>
onchange="groupprice_active_changed(this)"/>
</span>
</div>
</div>
<input hidden type="number" id="pricelevel_checked_array" name="pricelevel_checked_array[]" value="<?=$pricelevel_array[$count];?>">
<?php $count++; ?>
<?php endforeach; ?>
</form>
如您所见,我用1 或0 填充该数组,具体取决于$article_group_price 的值(我从控制器和最初的数据库中获取这些值)。
在第一次加载视图时一切正常并且数组被正确填充,但是当我选中或取消选中复选框时似乎无法更新数组。
我尝试使用 javascript onchange="groupprice_active_changed(this)" 快速而肮脏地做到这一点,我将使用 $count 变量来更改数组的索引,但不幸的是这没有成功,因为我只得到一个值并且不是整个数组:
<script>
function groupprice_active_changed(obj) {
if($(obj).is(":checked")){
alert("Yes checked");
var input_value_array = document.getElementById('pricelevel_checked_array').value;
console.log(input_value_array);
for (index = 0; index < input_value_array.length; index++) {
console.log(input_value_array[index]);
}
}else{
alert("not checked")
}
}
</script>
我怎样才能最好地更新这个数组或更改我的代码,以便我可以将动态生成的复选框发布到控制器? 另一个问题是我需要控制器中的复选框 ID,即使它是错误的。并且浏览器不会发布未选中的复选框值。因此,仅传递复选框不是一种选择。
我当然准备发布更多代码。
谢谢
免责声明:请勿窃取
查看:Complete code
控制者:Complete code
编辑 1:在上一节中将“php”更改为“浏览器”
编辑 2:添加与整个代码一样好,因为过滤掉会只会让它变得更加困难。
【问题讨论】:
-
不是 PHP 不发布复选框值。浏览器会(或不会)那样做。
-
小细节,但已编辑
-
请尽量增加你的代码来测试指定的问题。请在此处添加一个 jquery 标签。
-
复选框输入没有
name标签。你想用 JavaScript 还是 PHP 来做这个工作? -
@Brad 它看起来并不干净,但
>实际上以/>的形式关闭了 6 行。我实际上是根据article_group_price的状态修改<input>属性。
标签: php jquery arrays codeigniter