ListContainsNoCase、ValueList、自定义分隔符和多个 select 菜单中的前置项 select
ListContainsNoCase, ValueList, custom delimiters and preselecting items in a multiple select menu
我正在尝试根据已转换为竖线分隔的 ValueList 的数据库查询在多个 select 菜单中预置 select 项。除了我身边的一根刺外,一切正常。
如我所说,该列表是竖线分隔的,但在某些列表项中包含逗号。 (即 Communications (pagers, cell phones, etc.)
)。当我执行 listContainsNoCase() 时,寻找匹配项一切正常,直到遇到逗号。我期望的比赛不会像这样回来。它被忽略了。如果我排除逗号作为分隔符,为什么它们似乎 不会 被忽略?请参阅下面的代码示例。
<!---All possible categories pulled from the category table--->
<cfset allCategories = valueList(catdata.memberCategory, "|")>
<!---All category results that exist for a specific user's record--->
<cfset currentUserCategories = valueList(getUserRecord.categories, "|")>
<!---Multi select menu:--->
<label class="select select-multiple">
<cfoutput>
<select multiple="multiple" name="categories" id="categoriesA" style="height:200px;">
<cfloop list="#allcategories#" index="i" delimiters="|">
<option value="#trim(i)#"
<cfif listcontainsnocase(currentUserCategories, i)>selected="selected"</cfif>>
#trim(i)#
</option>
</cfloop>
</select>
</cfoutput>
</label>
Screenshot (blue text is currentUserCategories output):
所以我的问题是为什么菜单项 Communications (pagers, cell phones, etc)
被忽略了,我如何让我的代码包含它?
这是因为您没有指定 |
作为该函数的分隔符。所以 ListContainsNoCase 实际上是在使用它的默认值:逗号。您需要将分隔符指定为 |
.
也就是说,它可能不是正确的函数。 ListContainsNoCase() 搜索部分匹配项,因此您可能会得到一些误报。由于您试图匹配整个列表元素,因此您应该使用 ListFindNoCase():
<cfif ListFindNoCase(listToSearch, valueToFind , "|")>
最后,如果您的 table 具有唯一的类别数字 ID(应该如此),请考虑在相关 table 和列表值中使用该 ID,而不是文本。这避免了这种定界符问题。此外,在多个 table 中存储相关文本值时可能会发生存储 id minimizes inconsistencies。
我正在尝试根据已转换为竖线分隔的 ValueList 的数据库查询在多个 select 菜单中预置 select 项。除了我身边的一根刺外,一切正常。
如我所说,该列表是竖线分隔的,但在某些列表项中包含逗号。 (即 Communications (pagers, cell phones, etc.)
)。当我执行 listContainsNoCase() 时,寻找匹配项一切正常,直到遇到逗号。我期望的比赛不会像这样回来。它被忽略了。如果我排除逗号作为分隔符,为什么它们似乎 不会 被忽略?请参阅下面的代码示例。
<!---All possible categories pulled from the category table--->
<cfset allCategories = valueList(catdata.memberCategory, "|")>
<!---All category results that exist for a specific user's record--->
<cfset currentUserCategories = valueList(getUserRecord.categories, "|")>
<!---Multi select menu:--->
<label class="select select-multiple">
<cfoutput>
<select multiple="multiple" name="categories" id="categoriesA" style="height:200px;">
<cfloop list="#allcategories#" index="i" delimiters="|">
<option value="#trim(i)#"
<cfif listcontainsnocase(currentUserCategories, i)>selected="selected"</cfif>>
#trim(i)#
</option>
</cfloop>
</select>
</cfoutput>
</label>
Screenshot (blue text is currentUserCategories output):
所以我的问题是为什么菜单项 Communications (pagers, cell phones, etc)
被忽略了,我如何让我的代码包含它?
这是因为您没有指定 |
作为该函数的分隔符。所以 ListContainsNoCase 实际上是在使用它的默认值:逗号。您需要将分隔符指定为 |
.
也就是说,它可能不是正确的函数。 ListContainsNoCase() 搜索部分匹配项,因此您可能会得到一些误报。由于您试图匹配整个列表元素,因此您应该使用 ListFindNoCase():
<cfif ListFindNoCase(listToSearch, valueToFind , "|")>
最后,如果您的 table 具有唯一的类别数字 ID(应该如此),请考虑在相关 table 和列表值中使用该 ID,而不是文本。这避免了这种定界符问题。此外,在多个 table 中存储相关文本值时可能会发生存储 id minimizes inconsistencies。