【发布时间】:2014-12-07 11:24:48
【问题描述】:
我正在处理我得到两个列表的代码。我正在尝试使用这些列表来预先选择具有“多个”属性的选择框中的项目。但是,我无法维护这些选择。
代码:
<select name="sbbox" id="sbbox" class="can" multiple>
<cfloop list="#lstFinds#" index="k" delimiters=",">
<option value="#k#" <cfif #listfindnocase(k,getproducts.ptype)#>selected</cfif>>#k#</option>
</cfloop>
</select>
示例值:
lstFinds = abc,xyz-
getproducts.ptype还包含像abc,xyz这样的值
如果用户的两个值都存在,我想保持两者都被选中。如果存在一个,则保持选中一个。如果没有选择,则保持无。
我也尝试过使用listContains,但没有成功。
从 pastebin 链接转移
ptype 值在数据库中以逗号分隔,即“abc,wed,mon,def”。无论这些值是什么,我都需要匹配并选择 listFind 中具有相同值的值。我希望我说得更清楚。
<cfset lstFinds = 'abc,xyz,def,www,kkr,mon,tue,wed'>
<cfquery name="getproducts" datasource="cdfg">
select ptype
from
mytable
where
ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#id#">
</cfquery>
<select name="sbbox" id="sbbox" class="can" multiple>
<cfloop list="#lstFinds#" index="k" delimiters=",">
<option value="#k#" <cfif #listfindnocase(k,getproducts.ptype)#>selected</cfif>>#k#</option>
</cfloop>
</select>
【问题讨论】:
-
为 listFind 切换你的论点。该列表是第一个参数。如有疑问,请查看文档
-
我没有明白你到底想说什么,请你澄清一下
-
您的 listFind 函数应该将列表作为第一个参数,将要查找的值作为第二个参数
-
改变了它,但这并不能解决问题,我正面临
-
getproducts.ptype 的值也是这样的:“abc,xyz” 如果可能,不要存储分隔列表。那种非规范化结构suffers from a number of weaknesses(容易出错,难以查询,不能很好地扩展)并使数据库难以有效地完成工作。更好的结构是将相关值存储在联结表中。
标签: coldfusion