我正在为我的网站使用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>