我目前正在尝试创建一个<select>
下拉列表,该列表将根据<option>
变量(或默认值)选择选择的URL
。但是,我不希望我的选项列表看起来像;
name_az,name_za,最新,最旧
由于这不是非常用户友好,但我也不想在我的代码中使用这些;
名称A-Z(默认),名称Z-A,最新乐队,最旧乐队
因为很明显,这为我自己做了更多工作。
我可以手动创建每个选项列表,并对每组选项进行<cfif>
检查以选择所需的选项。但是,正如任何设计人员所知,当您创建循环列表并简单地向该列表添加两个值时,这会产生许多额外的,不必要的工作。
以下是我目前的代码;
<select>
<cfset sortlist = "name_az|Name A-Z (Default),name_za|Name Z-A,newest|Newest Bands,oldest|Oldest Bands">
<cfoutput>
<cfloop list="#sortlist#" delimiters="," index="sortpair">
<cfloop list="#sortpair#" delimiters="|" index="sortphrase">
<option value="#sortphrase#">#sortphrase#</option>
</cfloop>
</cfloop>
</cfoutput>
</select>
我想让它归还:
<select>
<option value="name_az">Name A-Z (Default)</option>
<option value="name_za">Name Z-A</option>
<option value="newest">Newest Bands</option>
<option value="oldest">Oldest Bands</option>
</select>
但是,显然我要求它在列出的任何地方返回sortphrase
,因此它将返回:
<select>
<option value="name_az">name_az</option>
<option value="Name A-Z (Default)">Name A-Z (Default)</option>
<option value="name_za">name_za</option>
<option value="Name Z-A">Name Z-A</option>
etc..
</select>
是否有办法创建<cfloop>
,我可以在列表中循环x
个数量的值?
答案 0 :(得分:5)
你使用嵌套循环的想法对我来说似乎不对。可以将其视为|分开列表,但为什么要循环呢?您最终会得到两倍于您需要的选项标签。尝试
<cfloop list="#sortlist#" delimiters="," index="sortpair">
<option value="#listFirst(sortpair, '|')#">#listLast(sortpair, '|')#</option>
</cfloop>
此外,通常阵列的执行速度比Coldfusion中的列表快。对于像这样小的东西并不重要,但我通常会使用数组而不是列表,至少对于循环来说(但可能仍然使用| -delimited list来表示两个独立的部分)。
或者,您可以为每个键值对使用结构。例如这是使用关联数组表示法的另一种方法:
<cfset sortarray = [
{name = "name_az", value = "Name A-Z (Default)"},
{name = "name_za", value = "Name Z-A"},
{name = "newest", value = "Newest Bands"},
{name = "oldest", value = "Oldest Bands"}
]>
<cfloop array="#sortarray#" index="sortstruct">
<option value="#sortstruct['name']#">#sortstruct['value']#</option>
</cfloop>
使用struct notation:
<cfloop array="#sortarray#" index="sortstruct">
<option value="#sortstruct.name#">#sortstruct.value#</option>
</cfloop>