自动完成插件没有在php jquery中传递值

时间:2012-04-27 12:40:35

标签: php jquery autocomplete

我正在使用自动填充功能

http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/

下面我有两页index.phpajx_page.php

的index.php

<form name="send_coup_ajx_form" id="send_coup_ajx_form" method="post">

    <select name="member_type" id="member_type">
        <option value="customer_type">Customer</option>
        <option value="BPartner_type">Business Partner</option>                
    </select>

    <input type="text" name="sel_rad" id="resultant_text" />

    <input type="submit" name="submit" value="go" />

</form>


<script type="text/javascript">
    $(document).ready(function(){


        $("#resultant_text").autocomplete("ajx_page.php", {
            width: 260,
            matchContains: true,
            //mustMatch: true,
            //minChars: 0,
            //multiple: true,
            //highlight: false,
            //multipleSeparator: ",",
            selectFirst: false
        });

    });

</script>

以下代码

ajx_page.php

<?php
    $select_type = $_GET['member_type'];
    $type = $_GET['sel_rad'];
?>

当我输入文本框时,它会给我一个错误

Notice: Undefined index: member_type in ajx_page.php on line 2

这意味着member_type不会进入该页面。

当我评论所有这些代码并将以下代码放在ajx_page.php

中时
<?php
    echo "Name1\n";
    echo "Name2\n";
    echo "Name3\n"
?>

显示自动填充功能列表。但是当我想获得该对象member_type的值时,它会说错误..

所以如何使用此自动完成插件传递其他值

我已将图像添加到覆盖问题@veeTrain

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为传入bassistance自动完成的附加参数,唯一的方法是修改autocomplete.js文件。我之前做过类似的事情,但这种方法非常难以编码。发布在下面供您参考(它在第376行附近):

$.ajax({
    // try to leverage ajaxQueue plugin to abort previous requests
    mode: "abort",
    // limit abortion to this input
    port: "autocomplete" + input.name,
    dataType: options.dataType,
    url: options.url,
    data: $.extend({
        member_type: ($("#member_type").length != 1)?$("#member_type").val():-1,
        q: lastWord(term),
        limit: options.max
    }, extraParams),
    success: function(data) {
        var parsed = options.parse && options.parse(data) || parse(data);
        cache.add(term, parsed);
        success(term, parsed);
    }
});

我只在原始代码中添加了一行,第10行:member_type: ...。 请注意,如果在该页面上找不到该对象以防止javascript错误,则传入“-1”。 希望它有所帮助!

答案 1 :(得分:1)

我不确定自动完成插件是否打算处理这种情况。

但是,如果你想手动将这些值传递到你的php脚本中,那么它将非常简单(至少在你只尝试发送两个字段的情况下)。

var memberType = $("#member_type>option:selected").val();
var selRad = $("#resultant_text").val();
$("#resultant_text").autocomplete("ajx_page.php?member_type="+memberType+"&sel_rad="+selRad, {
//...

但这可能不是您正在寻找的答案。

更新:我很高兴发送值的语法对您有用。

看起来你打印出重叠的ids - 你的意思是'大胆'吗?显然,您没有使用正确的分隔符来创建第二个自动完成建议。我不确定自动完成处理程序想要在项目之间描述什么。未定义可能会显示,因为找不到您的某个项目。您应该使用浏览器的开发人员工具来调试发送的内容。

此外,如果您想要选项的文字而不是value,那么您需要访问.text()而不是.val()选择下拉列表。

更新This post可能会对自动填充功能的预期发表意见。