如何在以下方案中保持在选择 HTML 控件中的选定特定值处于选中状态



我正在为我的网站使用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 条件失败时默认选择选项 --选择标签。如果满足 if 条件,则应选择该选项值。现在发生的事情是,当 if 条件失败时,选择框中的值"新查询"保持选中状态。实际上,我希望在if条件失败时默认选择值--选择标签。我尝试了很多来实现这一点,但没有成功。谁能在这方面帮助我?

好吧,也许有更优雅的方法,但是由于您可能不想使服务器端过载,因此您可以使用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属性,刷新后它不会获得具有该属性的真正选项。

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

{if $contact_label === $key}

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

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

$smarty->assign('MyArray',$enquiries_labels);$smarty->分配('选定选项',0);

现在在模板中

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

最新更新