【问题标题】:Set selected on options using PHP / JS使用 PHP / JS 设置选定的选项
【发布时间】:2013-08-22 06:14:04
【问题描述】:

我有一个大约 80 个选项值的列表,我知道必须有一种简单的方法可以使用 javascript 来完成此操作,有人愿意花我一点时间吗?

首先,$sid 是从 url 中提取的 get 变量 (whatever.php?sid=CR01)

遗憾的是,所有选项值都是硬编码的 -__- 继承了这个项目

<select name="siteid"  size="15">
    <option value="CR01" <?php if ($sid == 'CR01') { echo 'selected="selected"';} ?>>
         CR01 (Crooked Run @ Lake Frederick Dam)
    </option>
<option value="'CR02'">CR02 (Nineveh Spring)</option>
<option value="'CR03'">CR03 (Crooked Run @ Rt 639 bridge)</option>
<option value="'CR04'">CR04 (McKay Spring)</option>
<option value="'CR05'">CR05 (Crooked Run @ Cabin Ct)</option>
(etc etc etc)
</select>

【问题讨论】:

  • 你想用javascript做什么?能具体一点吗?
  • 您所做的可能是保留所选值的最佳解决方案,因为您获得了价值 $sid。如果列表是使用 jquery/javascript 填充的,那么 jquery 可能会很简单。
  • 首先如何填充选项?
  • 离题了,但是如果你为你的多选实现了 jquery 可能会是个好主意,因为总是更好的用户体验 => harvesthq.github.io/chosen

标签: php javascript html-select


【解决方案1】:

哦,是的,当然有一个简单的方法。

在 PHP 中

$opts = array(
    'CR01' => '...',
    'CR02' => '...',
    ....
);

<select name="siteid">
<?php foreach( $opts as $var => $opt ): ?>
  <option 
    value="<?php echo $var ?>"
    <?php if( $var == $sid ): ?>selected="selected"<?php endif; ?> >
   <?php echo $opt ?>
  </option>
<?php endforeach; ?>
</select>

在 JS 中

香草

function setOption(selectElement, value) {
  var options = selectElement.options;
  for (var i = 0, optionsLength = options.length; i < optionsLength; i++) {
    if (options[i].value == value) {
        selectElement.selectedIndex = i;
        return true;
    }
  }
  return false;
}
setOption(
  document.querySelector('select[name='siteid']'),
  "<?php echo $sid; ?>"
);

as described here

JQUERY

$("select[name='siteid'] option[value='<?php echo $sid; ?>']").prop('selected', true)

【讨论】:

  • 遗憾的是,所有选项都在 html 中编码,而不是在数组中 >
  • 它正在抓取变量,但它在前端没有做任何事情,我放错了什么吗?以下是来源:[链接]pastebin.com/dfdPAqBS
  • 您的 PHP 代码有一对额外的引号包围选项值 value="'CR01'" 删除一对。或使用这个:$("select[name='siteid'] option[value=\"'&lt;?php echo $sid ?&gt;'\"]")
  • 另外,我的 jquery 代码中有一个错误,引号混淆了。现在好了。
  • 仍然不想运行,我正要面对滚动我的键盘,然后只写php if/then
【解决方案2】:

使用 Javascript?为什么是Js?我会使用 PHP,以避免重复代码。假设您将所有选项都存储在一个数组中,我会这样做:

<select name="siteid"  size="15">
    <?php foreach ( $options as $option ) : ?>
    <option value="'.$option['value'].'"<?php echo ($option['selected'] == 1) ? ' selected="selected"':''?>> <?php echo $option['label'] ?> </option>
    <?php endoreach; ?>
</select>

您应该从数据库中获取值,使用 sql 标记一个名为 selected 的字段,如果不是 id,则为 0,如果是,则为 1。这样,您可以节省大量的编码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多