如何识别提交的值是否来自自动完成脚本?

时间:2011-08-01 00:28:10

标签: php mysql

在我的表单中有一个文本框和提交按钮。当用户开始输入时,在第3个字母之后,自动完成脚本会发挥作用。

有两种可能性。

  1. 用户输入一个单词,有匹配项并点击一个匹配项。此选定的匹配将添加到文本框中,然后点击提交按钮。
  2. 用户输入一个单词,有/没有匹配但是他决定点击提交按钮而不选择其中一个。
  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>
    

2 个答案:

答案 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/