我为准备jQuery函数写了一段PHP代码,该函数可以从html多选框中选择多个值。
有不同的竞选活动,它有单独的问题集,一个竞选活动有很多问题集。下面的代码将输出返回为
$('#q9 select').val('2');
$('#q10 select').val('2');
$('#q10 select').val('1');
但我需要此输出作为
$('#q9 select').val(['2']);
$('#q10 select').val(['2','1']);
要选择多包项目,有人能帮忙吗,谢谢。。。
<script>
$(function(){
<?php
foreach ($selectdefaults as $s):
?>
$('#q<?php echo $s['campsetjoin']['campid'];?> select').val('<?php echo $s['campsetjoin']['setid'];?>');
<?php
endforeach;
?>
});
</script>
我认为您应该在更改数组的格式之前:
现在你有这样的:
array(
array('campid'=>9, 'setid' => 2),
array('campid'=>10, 'setid' => 1),
array('campid'=>10, 'setid' => 2)
)
相反,你应该准备你的阵列,比如:
array(
array('campid'=>9, 'setid' => array(2)),
array('campid'=>10, 'setid' => array(1,2))
)
在这一点上,你可以写:
<script>
$(function(){
<?php
foreach ($selectdefaults as $s):
?>
$('#q<?php echo $s['campsetjoin']['campid'];?> select').val([<?php echo implode("','",$s['campsetjoin']['setid']); ?>]);
<?php
endforeach;
?>
});
</script>
我同意以上两个答案,即修改数据结构或使用纯JS解决方案会更干净。然而,如果两者都不是选项,你可以这样做:
<script>
$(function(){
<?php
// make a hash with the campid as the key
// and the value be an array of all of the setids
$campids = array();
foreach ($selectdefaults as $s):
$quoted_setid = "'"+$s['campsetjoin']['setid']+"'";
if ($campids[$s['campsetjoin']['campid']) {
$campids[$s['campsetjoin']['campid']][] = $quoted_sid;
}else {
$campids[$s['campsetjoin']['campid']] = array($quoted_sid);
}
endforeach;
foreach ($campids as $c=>$setids):
?>
$('#q<?php echo $c;?> select').val('[<?php echo implode(",", $setids);?>]');
<?php
endforeach;
?>
});
</script>
(链接到答案底部的代码/演示)
我建议您在原始数据和使用数据之间进行一个准备步骤。排列数据,使每个ID代表一个数据集:
array(2) {
[9]=>
array(1) {
[0]=>
int(2)
}
[10]=>
array(2) {
[0]=>
int(2)
[1]=>
int(1)
}
然后,JSON序列化数据并将其注入脚本,而不是混合PHP和JS(这会导致许多令人困惑的构造、引用等)。
(function (injected) {
/*
pure JS here, using `injected` var instead of PHP data
*/
}(
<?php echo json_encode($data); ?>
))
代码/演示:http://codepad.org/BfzOOlPT