通过jQuery设置表单值的任何缺点

时间:2013-04-04 08:48:59

标签: php javascript jquery

我有很多元素的表单,大多数是选择框,复选框,收音机。例如,在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,它将无法正常工作!

4 个答案:

答案 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发布,那么您将不必通过这种方式设置表单值。