我在我的ColdFusion页面上有一个下拉菜单,它根据其选择过滤数据列表。选择通过URL传递并显示结果。问题是我想保留页面重新加载后所做的选择。现在它每次都回到第一个选项。在ColdFusion中将URL传递给下拉菜单后,如何保留选择?
这是我如何通过下拉菜单中的onChange使其通过网址:
<cfif IsDefined(url.filterBy)>
query...
</cfif>
我在我的ColdFusion页面上有一个下拉菜单,它根据其选择过滤数据列表。选择通过URL传递并显示结果。问题是我想保留页面重新加载后所做的选择。现在它每次都回到第一个选项。在ColdFusion中将URL传递给下拉菜单后,如何保留选择?
这是我如何通过下拉菜单中的onChange使其通过网址:
<cfif IsDefined(url.filterBy)>
query...
</cfif>
您的选项标签里面,你把一个if语句来检查通过表单范围传递的值。
所以:
<select name="myDropdown" id="myDropdown">
<option value="someValue"<cfif Form.myDropdown EQ 'someValue'> selected="selected"</cfif>>Some value</option>
</select>
我的下拉菜单不在表格内,所以我不能把“Form.myDropdown”。有没有解决的办法? – wahle509 2011-02-07 15:14:11
如果我在读你的问题吧,你只需要看看现有URL.filterby
值符合您选择一个值。
<cfparam name="URL.filterby" value="" />
...
<select name="mySelect" onChange="window.location.href='myPage.cfm?filterBy=' + this.value">
<option value="option1" #selectIf(URL.filterby IS "option1")#>Option 1</option>
<option value="option2" #selectIf(URL.filterby IS "option2")#>Option 2</option>
</select>
CFPARAM确保始终存在URL.filterby的值。 selectIf
只是一个UDF,我用它来防止混乱我的HTML与CFML代码。它只需将任何可以解释为布尔值的东西并根据需要返回一个字符串。
function selectIf(checkVal) {
if (checkVal) {
return "selected=""selected""";
} else {
return "";
}
}
那么你的页面的其余部分可以看看URL.filterby,如果它有一个值,然后做你的查询,并显示您的数据。
<cfif structKeyExists(URL,"filterby") AND URL.filterby IS NOT "">
<!--- query here, etc. --->
...
所以,我已经找到了一种不同的方式(排序)。我所做的是抓住URL的字符串查询部分,只修剪国家名称并将其与下拉菜单的值进行比较。
<option value="#CountryName"
<cfif #CountryName# EQ #replace(#CGI.StringQuery#,"filterBy=","")#>
selected="selected"
</cfif>>#CountryName#
</option>
工程很好,大部分。当涉及到不止一个单词的国家名称时,这些空格会将其混淆并且不会保留选择。我试过也是这样替换空格:
#replace(#CGI.StringQuery#,"%20"," ")#
但是,没有好处。任何人都有解决方案来识别空间?
可能需要更多信息才能真正帮助您。你的SELECT是什么样的? – ale 2011-02-07 16:24:10
我的select语句如下: