【问题标题】:How to keep a specific value selected in a select HTML control in following scenario?在以下情况下,如何在选择 HTML 控件中保持选定的特定值?
【发布时间】:2014-01-07 10:54:18
【问题描述】:

我的网站使用 PHP、Smarty 和 MySQL。我有一个选择控件。它的代码如下:

<select name="contact_label" id="set_contact_label">
  <option value=""> -- Select label-- </option>
  {if $enquiries_labels}
    {foreach from=$enquiries_labels item=label key=key}
  <option value="{$key}" {if $contact_label == $key} selected="selected" {/if}>{$label}</option>
    {/foreach}
  {/if}
</select>

等效的HTML输出如下:

<select name="contact_label" id="contact_label">
  <option value=""> -- Select label-- </option>
  <option value="0" selected="selected">New Enquiry</option>
  <option value="1" >Retail Enquiry</option>
  <option value="2" >Feedback</option>
  <option value="3" >Payment Query</option>
  <option value="4" >Package Query</option>
  <option value="5" >Test Query</option>
</select>

现在我的问题是,当 if 条件失败时,我希望默认选择 --Select label-- 选项。如果满足 if 条件,则应选择该选项值。现在发生的情况是当 if 条件失败时,值 "New Enquiry" 在选择框中保持选中状态。实际上,我希望在 if 条件失败时默认选择值 --Select label-- 。我尝试了很多来实现这一目标,但未能成功。有人可以在这方面帮助我吗?

【问题讨论】:

  • 不知道 smarty 是否可以做到,但您可以测试 in_array() $enquiries_labels 中的 $contact_label 是否,如果不是,则将 selected 添加到第一个选项。我知道 smarty 中有一个 {php} 块,但不建议您使用它。在 Smarty 中查找 in_array 的内置函数。你也可以用javascript来做到这一点。解析整个选择框,如果不是selected属性,则在第一个选项后追加一个。

标签: php smarty option html-select selected


【解决方案1】:

好吧,也许有更优雅的方式,但也许你不想重载服务器端,你可以使用 javascript 来查找是否有任何元素选择了 attr,如果没有 - 添加到第一个。

<script>
    $( document ).ready(function() {
    var opts = document.getElementById("contact_label").options;
    var i, len = opts.length;
    var hasAttr = false;
        for(i = 0; i < len; i++) {
            if (opts[i].getAttribute("selected" ) != null ) {
                hasAttr = i;
                break;
            }
        }
        if(!hasAttr) {
            $("select option[value='']").attr("selected","selected");
        }
    });
</script>

这可能过于复杂,我尝试过这种方式,因为仅使用 prop() 或 attr() 将添加 selected 属性,但如果您手动选择另一个,解析器会认为此选项具有 selected 属性和刷新后它不会得到具有该属性的真实选项。

【讨论】:

    【解决方案2】:

    只需使用严格的比较运算符:

    {if $contact_label === $key}
    

    另外,您是否尝试过使用{html_options}?不确定,因为我很少在选择中使用 0 索引值,但它可能已经处理好了。

    【讨论】:

      【解决方案3】:

      你应该试试这个 在你需要的 php 文件中:

      $smarty->assign('MyArray',$enquiries_labels); $smarty->assign('selectedOption',0);

      现在在模板中

      <select name="contact_label" id="set_contact_label"> 
                  <option value="0">Please Select label</option> 
                  {html_options options=$MyArray selected=$selectedOption}
              </select>
      

      【讨论】:

      • 你可以在 html 选项中为 selectedOption 提供数组
      猜你喜欢
      • 1970-01-01
      • 2020-10-15
      • 2013-12-10
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多