自动完成 - 动作和点击
autoComplete - action & onClick
我有以下代码,可能会出现这样的情况,当用户键入某些内容时没有可用的自动建议,但我仍然希望用户输入文本。
我的 onClick
函数确实被调用了,但我想获取用户类型的值。
我尝试了以下方法,但 none 似乎有效。
自动完成标记
<p:autoComplete id="cityInput"
value="#{myBean.text}"
style="margin-right:15px;"
completeMethod="#{myBean.fetchData}"
global="false"
forceSelection="true"
maxResults="5">
</p:autoComplete>
按钮
<p:commandButton id="searchCity"
value="Search"
icon="ui-icon-search"
onclick="captureSearchText();"
action="#{myBean.search}"/>
脚本
<script type="text/javascript">
function captureSearchText(){
alert("88");
//var searchVal = myAutoComplete.input.val();
//var searchVal = document.getElementById("cityInput");
//alert(searchVal.value);
//return true;
}
</script>
编辑部分
当我按下 ENTER
键时,我在 fetchData
中得到搜索的字符串,可能是因为它是 p:commandButton
。但是在 单击按钮 时,我也想获取搜索到的文本。我希望现在清楚了。我该怎么做才能在鼠标单击搜索按钮时获取搜索文本。尝试调用 JavaScript 函数。
在 completeMethod #{myBean.fetchData}
中,如果真正 'searching' 没有产生任何结果,则仅 return 用户输入的搜索字符串。
public List<String> fetchData(String query) {
List<String> results = searchService.search(query);
if (results.isEmpty() {
results.add(query);
}
return results;
}
其实这没什么'jsf',纯粹的java创意。
但是用户仍然需要 select 它,除非自动完成有一个 autoselect 选项。不确定这一点。但是您也可以将查询字符串存储在变量服务器端,如果用户没有 select 任何东西(将字段设置为必填比 imo 更好)
,则使用它
public List<String> fetchData(String query) {
List<String> results = searchService.search(query);
this.queryString = "";
if (results.isEmpty() {
results.add(query);
this.queryString = query
}
return results;
}
如果你总是想存储它,或者把它移到 ifEmpty 之外
forceSelection="true"
实际上是一个问题,它正在强制选择。
我已经删除了它并且运行很顺利。
@Kukeltje 的回答也很好,但这是一种解决方法,forceSelection="true"
实际上是根本原因。
我有以下代码,可能会出现这样的情况,当用户键入某些内容时没有可用的自动建议,但我仍然希望用户输入文本。
我的 onClick
函数确实被调用了,但我想获取用户类型的值。
我尝试了以下方法,但 none 似乎有效。
自动完成标记
<p:autoComplete id="cityInput"
value="#{myBean.text}"
style="margin-right:15px;"
completeMethod="#{myBean.fetchData}"
global="false"
forceSelection="true"
maxResults="5">
</p:autoComplete>
按钮
<p:commandButton id="searchCity"
value="Search"
icon="ui-icon-search"
onclick="captureSearchText();"
action="#{myBean.search}"/>
脚本
<script type="text/javascript">
function captureSearchText(){
alert("88");
//var searchVal = myAutoComplete.input.val();
//var searchVal = document.getElementById("cityInput");
//alert(searchVal.value);
//return true;
}
</script>
编辑部分
当我按下 ENTER
键时,我在 fetchData
中得到搜索的字符串,可能是因为它是 p:commandButton
。但是在 单击按钮 时,我也想获取搜索到的文本。我希望现在清楚了。我该怎么做才能在鼠标单击搜索按钮时获取搜索文本。尝试调用 JavaScript 函数。
在 completeMethod #{myBean.fetchData}
中,如果真正 'searching' 没有产生任何结果,则仅 return 用户输入的搜索字符串。
public List<String> fetchData(String query) {
List<String> results = searchService.search(query);
if (results.isEmpty() {
results.add(query);
}
return results;
}
其实这没什么'jsf',纯粹的java创意。
但是用户仍然需要 select 它,除非自动完成有一个 autoselect 选项。不确定这一点。但是您也可以将查询字符串存储在变量服务器端,如果用户没有 select 任何东西(将字段设置为必填比 imo 更好)
,则使用它public List<String> fetchData(String query) {
List<String> results = searchService.search(query);
this.queryString = "";
if (results.isEmpty() {
results.add(query);
this.queryString = query
}
return results;
}
如果你总是想存储它,或者把它移到 ifEmpty 之外
forceSelection="true"
实际上是一个问题,它正在强制选择。
我已经删除了它并且运行很顺利。
@Kukeltje 的回答也很好,但这是一种解决方法,forceSelection="true"
实际上是根本原因。