Vb.net VB WebMethod返回值,但jQuery自动完成不显示它们

Vb.net VB WebMethod返回值,但jQuery自动完成不显示它们,vb.net,jquery-autocomplete,Vb.net,Jquery Autocomplete,我有一个vb.net网页,上面有一个asp文本框,我正在尝试将jquery autocomplete附加到该文本框。调试器向我显示,在文本框中键入将调用代码隐藏中的相关webmethod。这将调用另一个使用LINQtoSQL获取结果的方法,然后返回这些结果,然后。。。没有什么VS调试器显示从webmethod成功返回的正确结果,浏览器控制台不显示任何错误,但自动完成从不显示建议 代码隐藏文件和jquery之间的建议发生了什么变化 自动完成 网络方法 文本框 您使用autocomplete时出错,

我有一个vb.net网页,上面有一个asp文本框,我正在尝试将jquery autocomplete附加到该文本框。调试器向我显示,在文本框中键入将调用代码隐藏中的相关webmethod。这将调用另一个使用LINQtoSQL获取结果的方法,然后返回这些结果,然后。。。没有什么VS调试器显示从webmethod成功返回的正确结果,浏览器控制台不显示任何错误,但自动完成从不显示建议

代码隐藏文件和jquery之间的建议发生了什么变化

自动完成

网络方法

文本框


您使用autocomplete时出错,这就是解决方法:

var submitOK = false;
var searchURL = null;
var checkURL = null;
var autocomplete_fieldname = null;

function autocomplete(fieldName, ajaxURL_getList, ajaxURL_checkInput, formID)
{
    searchURL = ajaxURL_getList;
    checkURL = ajaxURL_checkInput;
    autocomplete_fieldname = fieldName;
    var txtField = $(":text[name='" + fieldName + "']");
    txtField.autocomplete({delay : 50, minLength : 1, search : search, source : searchURL + txtField.val()});
    $("form#" + formID).on("submit", _submit);
}

function search()
{
    //console.log("changed");
    var me = $(":text[name='" + autocomplete_fieldname + "']");
    var val = me.val();
    me.autocomplete("option", "source", searchURL + val);
}

function _submit(evt)
{

    var txtField = $(":text[name='" + autocomplete_fieldname + "']");
    jQuery.ajaxSetup({async:false});
    var xhr = jQuery.getJSON(checkURL + txtField.val() , null, submitResult);
    jQuery.ajaxSetup({async:true});

    return submitOK;
}

function submitResult(data)
{
    var txtField = $(":text[name='" + autocomplete_fieldname + "']");

    if(!data || data === "false" || data === false)
    {
        txtField.effect("shake");
        submitOK = false;
    }
    else
    {
        submitOK = true;
    }

}
然后在各个表单和字段上设置自动完成,如下所示:

autocomplete("MY_FORM_FIELD_NAME", "MY_AJAX_URL?GETLIST=", "MY_AJAX_URL?GETVALUE=", "MY_FORM_ID");

此脚本将拒绝在数据源中找不到的输入-这是一个非常好的验证,它还提供了强大的自动完成功能。你必须有jQuery用户界面,但我猜大多数使用jQuery的人也有jQ用户界面:

结果问题中的代码工作正常,但从文本框中删除焦点会说,若要在Visual Studio中的断点上单击“继续”,将停止显示下拉列表。

我首先要做的是在AJAX调用的成功函数中放置一个console.log,然后查看VB方法是否返回您期望的值。@DouglasBarbin看起来返回了一个正确值的数组:[value1,value2,value3,value4,value5]
<asp:UpdatePanel ID="upnlMain" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:TextBox ID="txtJobNumber" runat="server" MaxLength="7" Width="75px" CssClass="autoJobNum" />
    </ContentTemplate>
</asp:UpdatePanel>
var submitOK = false;
var searchURL = null;
var checkURL = null;
var autocomplete_fieldname = null;

function autocomplete(fieldName, ajaxURL_getList, ajaxURL_checkInput, formID)
{
    searchURL = ajaxURL_getList;
    checkURL = ajaxURL_checkInput;
    autocomplete_fieldname = fieldName;
    var txtField = $(":text[name='" + fieldName + "']");
    txtField.autocomplete({delay : 50, minLength : 1, search : search, source : searchURL + txtField.val()});
    $("form#" + formID).on("submit", _submit);
}

function search()
{
    //console.log("changed");
    var me = $(":text[name='" + autocomplete_fieldname + "']");
    var val = me.val();
    me.autocomplete("option", "source", searchURL + val);
}

function _submit(evt)
{

    var txtField = $(":text[name='" + autocomplete_fieldname + "']");
    jQuery.ajaxSetup({async:false});
    var xhr = jQuery.getJSON(checkURL + txtField.val() , null, submitResult);
    jQuery.ajaxSetup({async:true});

    return submitOK;
}

function submitResult(data)
{
    var txtField = $(":text[name='" + autocomplete_fieldname + "']");

    if(!data || data === "false" || data === false)
    {
        txtField.effect("shake");
        submitOK = false;
    }
    else
    {
        submitOK = true;
    }

}
autocomplete("MY_FORM_FIELD_NAME", "MY_AJAX_URL?GETLIST=", "MY_AJAX_URL?GETVALUE=", "MY_FORM_ID");