在我的表单中有一个文本框和提交按钮。当用户开始输入时,在第3个字母之后,自动完成脚本会发挥作用。
有两种可能性。
我的问题是如何确定他是否在案例1或案例2中按下了按钮。
rpc.php 是通过mySQL查找建议值的文件。
解决方案是检查字符串是否存在于数据库中,但我不想这样做。
另一个解决方案是转换显示产品名称的jQuery脚本和php代码,而不是将产品放在文本框中,它应该将他带到结果页面。这也解决了我的问题。
<script type="text/javascript">
$().ready(function() {
$("#s").autocomplete("rpc.php", {
width: 250,
selectFirst: false,
minChars: 3,
scroll:true,
matchContains: true,
scrollHeight: 250
});
});
</script>
<form method="get" action=".php">
<input type="text" name="s" id="s" class="inputsearch">
<input type="submit">
</form>
答案 0 :(得分:0)
最简单的方法是修改autocomplete
插件本身,以便在用户从中选择值时设置标志,并在用户修改其选择时将其清除。旗帜可以在任何地方,但为了简单起见,我建议一个隐藏的表格字段,如:
<form method="get" action=".php">
<input type="text" name="s" id="s" class="inputsearch">
<input type="hidden" id="flag" name="inputCameFromAutocomplete" value="false">
<input type="submit">
</form>
因此,在autocomplete
插件中,当用户进行选择时,您可以添加以下内容:
$("#flag").val("true");
如果你想,你可以使插件配置/选项的标志元素的id /选择器成为可重用的。
您还需要执行以下操作:
$("#s").keypress(function() {
$("#flag").val("false");
});
...作为初始设置的一部分,只要用户在字段中手动输入内容,就会重置标记。
答案 1 :(得分:0)
使用自动填充的change
方法在表单中设置标记,例如
/// Create an hidden element to store the flag value,
/// 1 for AC used, 0 for user entered
var flag = $("<input>").attr("type", "hidden")
.attr("name", "ac_flag")
.val(0);
// append flag to form
$("form").append(flag);
$("#s").autocomplete("rpc.php", {
change: function(event, ui) {
flag.val(ui.item != null ? 1 : 0);
},
// and the rest
});
当文本字段中的值发生更改时,将触发“change”事件。选择AC项目时,ui.item
将包含对列表中所选项目的对象引用。如果没有做出选择,即用户只是输入了文本,ui.item
将为空。
然后,您的表单处理程序可以检查$_GET['ac_flag']
以确定该值是否来自自动完成列表。
快速模型示例 - http://jsfiddle.net/9GQgh/