1

我有很多元素的表单,大多数是选择框、复选框、单选框。例如下面的选择框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>

我觉得代码更干净。我打算将所有表单代码重新填充更改为这种方式。我想知道使用 second 有什么缺点吗?.. 我的应用程序用于图表渲染,如果禁用 JavaScript,它将无法工作!

4

4 回答 4

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);
于 2013-04-04T09:02:06.157 回答
1

由于您的应用程序在不禁用 JS 的情况下根本无法运行,因此实际上没有什么可以被认为是这种方法的缺点。事实上,用这种方式隐藏选择框以使 AJAX 调用加载的值可能更容易。

于 2013-04-04T08:57:04.263 回答
0

缺点是您的代码现在依赖于 JavaScript 和 jQuery。一些(极少数人)禁用了 JavaScript,因此默认情况下不会选择任何内容

这不是最佳实践,但我必须承认,我过去曾以类似的方式使用 JavaScript,只是为了方便/轻松。感觉有点“hacky”

于 2013-04-04T08:51:53.493 回答
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 发布,这样您就不必通过这种方式设置表单值。

于 2013-04-04T09:01:59.970 回答