我有很多元素的表单,大多数是选择框,复选框,收音机。例如,在selectbox chart[type]
下面我通过php
<select name="chart[type]" id="chart_type" >
<option value="nps" <?php if ( $chart_data['chart']['type'] == 'nps' ) echo ' select="selected" '; ?> >NPS Barchart</option>
<option value="score" <?php if ( $chart_data['chart']['type'] == 'score' ) echo ' select="selected" '; ?>>Number/score</option>
<option value="top5" <?php if ( $chart_data['chart']['type'] == 'top5' ) echo ' select="selected" '; ?>>Top 5</option>
</select>
我尝试使用jQuery从值设置代码
<select name="chart[type]" id="chart_type" >
<option value="nps" >NPS Barchart</option>
<option value="score">Number/score</option>
<option value="top5">Top 5</option>
</select>
<script>
$(function(){
$('[name="chart[type]"]').val(
'<?php echo $chart_data['chart']['type']; ?>'
);
});
</script>
我觉得代码更干净。我打算以这种方式更改所有表单代码补充。我想知道使用秒的任何缺点吗? ..我的应用程序用于图表渲染,如果禁用JavaScript,它将无法正常工作!
答案 0 :(得分:3)
如果你正在使用PHP并且没有真正的理由使用JavaScript来打印HTML,我会继续使用PHP。像这样混合不是一个好主意,你应该考虑AJAX。但是,您可以使您的PHP代码更易于维护和动态:
<?php
$data = array(
'nps' => 'NPS Barchart',
'score' => 'Number/score',
'top5' => 'Top 5'
);
$options = '';
foreach ($data as $key => $value) {
$selected = $chart_data['chart']['type'] == $key ? 'selected' : '';
$options .= sprintf('<option class="%1$s" %2$s>%3$s</option>', $key, $selected, $value);
}
echo sprintf('<select name="chart[type]" id="chart_type">%s</select>', $options);
答案 1 :(得分:1)
由于您的应用程序在没有JS禁用的情况下根本无法运行,因此实际上没有什么可以被认为是这种方法的缺点。事实上,这种方式可能更容易转换您的选择框以使AJAX调用加载值。
答案 2 :(得分:0)
缺点是您的代码现在依赖于JavaScript和jQuery。有些人(极少数人)禁用了JavaScript,因此默认情况下不会选择任何内容
这不是最佳做法,但我必须承认,过去我以类似的方式使用JavaScript只是为了方便/轻松。感觉有点“hacky”
答案 3 :(得分:0)
在一个区块中使用两种语言并不总是坏事。但当你的一行
'<?php echo $chart_data['chart']['type']; ?>'
成为不止一行,它会开始变得相当混乱。
当发生这种情况时,您可以执行以下操作。
<script>
$(function(){
// assignment from php
var chart_type = '<?php echo $chart_data['chart']['type']; ?>';
$('[name="chart[type]"]').val(chart_type);
});
</script>
无论如何,如果您可以转换您的应用程序以执行ajax发布,那么您将不必通过这种方式设置表单值。