0

jQuery のオートコンプリート ウィジェットを機能させるのに苦労しています。サーバーからのキーと値のペアのリストを使用しています。

次の要件があります。

  1. ユーザーが値の id を設定した場合、都市のコードを知っていて、都市の名前を入力する代わりに都市のコードを入力するように、オートコンプリートが都市の名前を入力することを望みます。それはありません!
    マイコードを編集したところ、動作するようになりました!
    この行を追加します
    if (data.d.length == 1 && request.term.match(/\d+/g)) SetValue(textbox, hidden, data.d[0]); else

と関数
function SetValue(textbox, hidden, value){ textbox.focus().val(value.Text); hidden.val(value.Semel);}

  1. 別のことは、作成と編集に同じページを使用している場合です-編集中にページをリロードすると、値のすべてのスパンなどを再作成する必要があり、サーバーからオートコンプリートのコードだけではなく、送信したいテキスト値、およびテキストボックスに値を設定するときに必要な場合、オートコンプリートが機能し始め、サーバーから値が
    取得
    され ます値(リクエスト値)を送信して、これ
    が私のC#コードです:

    [WebMethod(EnableSession = true)]
    [ScriptMethod]
    public List<IEntityBase> FetchList(string Text, string Code, string Dspl, int NumRecordes, string TableName)
    {
        Text = Server.UrlDecode(Text);
        List<Tavla> tvListById = null;
        int ignored = 0;
    if (int.TryParse(Text, out ignored))
        tvListById = TvList.GetTvListById(TableName, ignored, Code, Dspl);if (tvListById != null && tvListById.Count != 0)
        return tvListById.Cast<IEntityBase>().ToList();
    
    var fetchShem = TvList.GetData(TableName, Code, Dspl)
    .Where(m => m.Shem.ToLower().Contains(Text.ToLower()))
    .Take(NumRecordes);
    return fetchShem.Cast<IEntityBase>().ToList();
    

    }

ここに私のJqueryコードがあります:

enter code here

 textbox.autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "AutoComplete.asmx/" + funcName,
                data: "{ 'Text': '" + escape(request.term) + "','Code':'" + code + "','Dspl':'" + dspl + "','NumRecordes':'" + numrecordes + "','TableName':'" + tablename + "'}",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {                      
                    if (data.d.length == 1 && request.term.match(/\d+/g))
                            SetValue(textbox, hidden, data.d[0]);
                        else
                        response($.map(data.d, function (item) {
                            return {
                                label: item.Text,
                                value: item.Semel
                            }
                        }));
                    }
                },
                error: function (msg) { alert(msg); }
            });
        },
        minLength: minLength,
        select: function (event, ui) {
            var selectedObj = ui.item;
            if (selectedObj) {
                textbox.val(selectedObj.label);
                hidden.val(selectedObj.value);
            }       return false;   },

    });function SetValue(textbox, hidden, value) {
textbox.focus().val(value.Text);
hidden.val(value.Semel);

}

4

1 に答える 1

0

最初の質問については、試したロジックにすべて依存します。念のため、国のIDを持っている場合、これは難しくありません。

2 番目のクエリはすべてページのパフォーマンスに関するものです。これは、ajax を使用して検索パターンに基づいて要素を更新しようとしても、ページの残りの部分をそのまま維持しながら、関連する要素のみを更新する必要がある場合でも、それほど難しくはありません。

同じことをよりよく理解するには、http://jquery.com/を参照してください。

于 2013-04-17T13:17:24.917 に答える