2013-03-21 47 views
1

我正在嘗試創建一個<select>下拉列表,它將根據URL變量(或默認值)選擇哪個<option>。但是,我不希望我的選項列表看起來像;嵌套「cfloop」標籤以循環通過對

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值的數量?

回答

5

你使用嵌套循環的想法對我來說似乎是錯誤的。把它當作一個|來對待是可以的分開的列表,但爲什麼循環它呢?您只需根據需要選擇兩倍的選項標籤。嘗試

<cfloop list="#sortlist#" delimiters="," index="sortpair"> 
    <option value="#listFirst(sortpair, '|')#">#listLast(sortpair, '|')#</option> 
</cfloop> 

另外,通常數組的執行速度比Coldfusion中的列表快。對於像這樣的小東西來說,它並不重要,但我通常會使用數組而不是列表,至少對於循環(但可能仍然使用| -delimited列表來表示兩個單獨的部分)。

或者,您可以爲每個鍵值對使用一個結構。例如下面是使用關聯數組表示法做的另一種方式:

<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> 

或使用結構符號:

<cfloop array="#sortarray#" index="sortstruct"> 
    <option value="#sortstruct.name#">#sortstruct.value#</option> 
</cfloop> 
+0

這就是我想說的,循環它的概念是一種方式「正確的」因爲你想循環列表本身,但顯然你不能在cfloop列表上設置'from'和'to'值。但是,您的解決方案看起來像是我需要的解決方案,我還沒有看到#listFirst#和#listLast#屬性,所以謝謝!我現在就試試這個。 – Banny 2013-03-21 12:38:17

+0

肯定更喜歡數組的想法。這是一個比狹窄列表更適合的方式。您可以更輕鬆地閱讀這些值以發現任何問題,並且創建新值也很容易。謝謝:) – Banny 2013-03-21 12:41:53

+0

我遇到了一個小問題,我複製並粘貼了你的代碼,但是我收到一個錯誤,提示「變量名稱未定義」 – Banny 2013-03-21 12:46:25