【问题标题】:jQuery Autocomplete Doesn't Invoke For Textbox in ASP.NETjQuery 自动完成不会调用 ASP.NET 中的文本框
【发布时间】:2014-07-26 11:41:15
【问题描述】:

我正在尝试在其他人编写的 asp.net 项目中使用 jquery 自动完成脚本。虽然我可以在一个单独的项目中运行它,但在我提到的项目中实施时它不会做任何事情。它们都在 .net 4.0 框架上。页面的html代码是这样的:

<%@ Page Title="" Language="C#" MasterPageFile="~/site.master" AutoEventWireup="true" CodeFile="Meslek.aspx.cs" Inherits="AutoComplete.Scripts_Meslek" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script language="javascript"  type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>  
<script language="javascript"  type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> 
<script language="javascript"  type="text/javascript">
    $(document).ready(function () {
        $("#ContentPlaceHolder1_txtCountry").autocomplete({
            source: function (request, response) {
                var param = { keyword: $('#ContentPlaceHolder1_txtCountry').val() };
                $.ajax({
                    url: "Meslek.aspx/GetCountryNames",
                    data: JSON.stringify(param),
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                value: item
                            }
                        }))
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 1
        });
    });


</script>  
<div>
   <asp:TextBox ID="txtCountry" runat="server"></asp:TextBox>
   <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
 </div>
 <br />
</asp:Content>

我认为问题是下面的这一行应该调用函数来从后面的代码中检索自动完成单词,但是无论我输入文本框,什么都没有发生。

$("#ContentPlaceHolder1_txtCountry").autocomplete({

我知道代码有效,因为我在不同的项目中使用它,但是当我在这个项目上实现它时,我什么也没得到。我知道从后面的代码返回的列表有效,如果我可以在那里调用该函数,我相信我会检索结果。

所以问题是,这可能是什么原因?这是某些项目属性引起的,是母版页引起的,是我调用函数的代码错误还是其他原因?


Meslek.aspx 中的完整代码如下

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace AutoComplete
{
    public partial class Scripts_Meslek : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string[] GetCountryNames(string keyword)
        {
            List<string> country = new List<string>();
            //string query = string.Format("SELECT DISTINCT Country FROM Customers WHERE Country LIKE '%{0}%'", keyword);
            string query = string.Format("SELECT mslk FROM meslek WHERE mslk LIKE '%{0}%'", keyword);

            using (SqlConnection con =
                //new SqlConnection("Data Source=KMISBPRDSQL001; Database=SIRIUS; Initial Catalog=SIRIUS; Trusted_Connection=True; "))
                    new SqlConnection(WebConfigurationManager.ConnectionStrings["SIRIUS"].ConnectionString))
            {
                using (SqlCommand cmd = new SqlCommand(query, con))
                {
                    con.Open();
                    SqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        country.Add(reader.GetString(0));
                    }
                }
            }

            return country.ToArray();
        }
    }
}

【问题讨论】:

  • 我找到了解决方案,想在这里分享。这只是一个字母和一个点造成的。只需将 data.d 更改为 data 就可以了。 data.d 返回“未定义”作为值,而数据显示了这一切。因此,该项目与 .d 不兼容,无法显示我猜的值。

标签: javascript jquery asp.net autocomplete textbox


【解决方案1】:

我建议使用这个:

使用功能:

function CompleteText() {
      $(document).ready(function () {
    $(".Country").autocomplete({
        source: function (request, response) {
            var param = { keyword: $('.Country').val() };
            $.ajax({
                url: "Meslek.aspx/GetCountryNames",
                data: JSON.stringify(param),
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return {
                            value: item
                        }
                    }))
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });
        },
        minLength: 1
    });
   });
}

在文本框中:

 <asp:TextBox ID="txtCountry" onfocus="CompleteText()" runat="server"   class="Country" Width="298px"></asp:TextBox>

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2021-12-15
    • 2018-07-29
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2011-06-06
    相关资源
    最近更新 更多