Php 在下面的场景中,如何在select HTML控件中保持选定的特定值?

Php 在下面的场景中,如何在select HTML控件中保持选定的特定值?,php,smarty,option,html-select,selected,Php,Smarty,Option,Html Select,Selected,我的网站使用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} <optio

我的网站使用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>
<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>
等效HTML输出如下所示:

<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>
<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条件失败时默认选择选项-selectlabel。如果满足If条件,则应选择该选项值。现在发生的是,如果条件失败,则在选择框中保持选中“新建查询”的值。实际上,我希望在if条件失败时默认选择值selectlabel。为了达到这个目标,我做了很多努力,但没有成功。有人能在这方面帮助我吗?

好吧,也许有更优雅的方法,但因为您可能不想让服务器端过载,所以可以使用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将添加选定的属性,但如果手动选择另一个属性,解析器将认为此选项已选择属性,刷新后将不会获得具有该属性的实际选项。

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

{if $contact_label === $key}
还有,你试过使用吗?不确定,因为我很少在选择中使用0索引值,但它可能已经解决了这个问题。

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

$smarty->assign'MyArray',$Inquiries\u标签; $smarty->分配'selectedOption',0

现在在模板中

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

不知道smarty是否可以这样做,但您可以测试$Inquiries\u标签中的$contact\u标签是否在数组中,如果没有,则将selected添加到第一个选项中。我知道smarty中有一个{php}块,但不建议您使用它。在Smarty中查找in_阵列的内置函数。您也可以使用javascript来实现这一点。解析整个选择框,如果未选择属性,则将其附加到第一个选项。您可以在html选项中为selectedOption提供数组