Php 循环通过一组复选框并插入值
第一次发帖,希望一切顺利:) 我已经为此工作了一段时间,但基本上我是这样做的: 我需要为我正在循环的每个复选框设置一个yes/no值,现在它可以工作,但是当我更改一个复选框时,它正在更改all的值 我的foreach循环:Php 循环通过一组复选框并插入值,php,jquery,arrays,foreach,checkbox,Php,Jquery,Arrays,Foreach,Checkbox,第一次发帖,希望一切顺利:) 我已经为此工作了一段时间,但基本上我是这样做的: 我需要为我正在循环的每个复选框设置一个yes/no值,现在它可以工作,但是当我更改一个复选框时,它正在更改all的值 我的foreach循环: <?php $object = new stdClass(); $i = 0; ?> <?php foreach( $filters as $key => $value ) { ?> <tr> &l
<?php $object = new stdClass(); $i = 0; ?>
<?php foreach( $filters as $key => $value ) {
?>
<tr>
<td><label for="show_filter">Show <?php echo $object->$key = $value['filter']; ?> Filter</label></td>
<td><input type="checkbox" class="show_filter" <?php //if ( $row['active_filter'] === 'yes' ) { ?>checked="checked"<?php //} ?> name="dp_show_filter" value="<?php echo $object->$key = $value['active_filter']; ?>"/><?php echo $object->$key = $value['active_filter']; ?></td>
<td><a class="button-primary" href="?page=profolio_theme&del=<?php echo $row['id'];?>">Delete</a></td>
</tr>
<?php
$i++;
}
显示过滤器
name=“dp_show_filter”值=”“/>
它正在更改所有的值,就像您给页面上创建的每个复选框赋予相同的名称一样
您可以将PHP代码更改为类似以下内容:
<?php $object = new stdClass(); $i = 0; ?>
<?php foreach( $filters as $key => $value ) {
?>
<tr>
<td><label for="show_filter">Show <?php echo $object->$key = $value['filter']; ?> Filter</label></td>
<td><input type="checkbox" class="show_filter" <?php //if ( $row['active_filter'] === 'yes' ) { ?>checked="checked"<?php //} ?> name="dp_show_filter_<?php echo $row['id'] ?>" value="<?php echo $object->$key = $value['active_filter']; ?>"/><?php echo $object->$key = $value['active_filter']; ?></td>
<td><a class="button-primary" href="?page=profolio_theme&del=<?php echo $row['id'];?>">Delete</a></td>
</tr>
<?php
$i++;
}
我很肯定这会像你描述的那样解决你的问题。如果没有更完整的代码示例,很难判断 您使用每个循环遍历customCheckbox
数组,但在循环中,您可以访问$(showFilter)
,这是一个全局数组
你的意思是$(showFilter[i])
回调函数接收i
(循环中的索引)作为参数:
return customCheckbox.each(function(i) {
...
if( $(showFilter[i]).val() === 'yes'){ ...
在仍然使用$_POST['some-name']的情况下动态更改名称的最佳方法是什么?在jQuery中,由于我在其他地方使用了该方法,所以在不太具体的情况下以这些输入为目标?我会在复选框中已有的名称文本之后使用$key
或$row['id']
。请记住,名称和ID不能以数字开头。这样:name=“dp\u show\u filter”
然后,在选择代码中,您可以将$(showFilter)
替换为$(this)
,因为您已经在集合中的每个复选框上进行操作。对于这一点,您还可以在showfilter选择之后去掉多余的块,这将再次重复您的工作。我会在我的回复帖子中更新代码。这是真的,不知道为什么我没有想到这一点。我是否需要在javascript中执行与$('.dp_wrap input[name=“dp_show_filter”]')不同的操作?可能改用类?您已经选择了.dp\u wrap
元素中的所有复选框(我假设这就是您想要做的)。因此,做出我上面建议的改变仍然可以实现你的愿望。但是,是的,为了将来验证此代码(特别是在其他地方使用),如果要向整个集合添加唯一的类名,它将增加额外的安全性,以确保选择正确的元素集合。然后替换customCheckbox=$('.dp_wrap input[type=“checkbox”]”)代码>带有customCheckbox=$('.dp\u wrap.checkbox\u class\u name')代码>。你也可以去掉下面的showFilter
行。我会在php中尝试一下,但在javascript中,检查val==yes可能太具体了,因为我在其他不使用yes/noI的元素上使用了它。我在末尾添加$I++时尝试了[]和[$I],这破坏了单击功能。如果你添加了[$I]
正如这里所建议的,那么您将$i
变量作为.each()
函数中元素的递增函数以及值[]
数组的索引。如果您改为在混音中添加一个$j
来增加。每个()
函数都应该可以工作,但不是处理它的最佳方式。我编辑了我的答案。您应该使用循环索引,它是作为回调的参数提供的。每个回调都使用循环索引。这有助于我更进一步,因为我能够让它们单独更改,但现在没有任何内容发布到数据库。除了您添加的内容之外,我还添加了var id=parseInt(this.id.replace(“show_filter_u)”,“”);var showFilter=$(“show\u filter\uu”+id);
// default state
if( $(this).val() === 'yes'){
$(this).prop('checked', true);
$(rep).removeClass('off').addClass('on');
} else {
$(this).prop('checked', false);
$(rep).removeClass('on').addClass('off');
}
return customCheckbox.each(function(i) {
...
if( $(showFilter[i]).val() === 'yes'){ ...