1

私は一般的にjqueryとjavascriptプログラミングにまったく慣れていないので、しばらくお待ちください。

jquery オートコンプリート プラグインのインスタンスを含む ASP.NET Web ユーザー コントロール (region.ascx) があります。jquery コード (簡潔にするためにコードを省略しています) は次のとおりです。

$(function () {
    initializerRegion();
});

var prmInstance = Sys.WebForms.PageRequestManager.getInstance();

prmInstance.add_endRequest(function () {
    //you need to re-bind your jquery events here 
    initializerRegion();
});

function initializerRegion() {

    $($get('<%= autoRegion.ClientID %>')).autocomplete({
        source: function (request, response) {..........................

asp.net ページにコントロールのインスタンスが 1 つしかない場合、コントロールは正常に動作します。2 つの個別のユーザー コントロール (Org.ascx と Place.ascx) があり、それぞれが単一の asp.net ページにある region.ascx のインスタンスを持っているため、上記のコードの 2 つのインスタンスになってしまいます。 . この場合、最後のインスタンス (place.ascx 用) のみが正しく初期化され、機能します。もう一方のインスタンス (org.ascx) は何もしません。

上記の Initializer コードを必要な各コントロールに配置し、基本的に region.ascx コントロールを取り除くことで、これを回避できると思います。これを行ってイニシャライザ関数の名前を一意にすれば、うまくいくかもしれないと感じています。

私の質問は次のとおりです。これを正しく行っていますか? これを回避する方法はありますか?

4

3 に答える 3

1

コードの問題は、prmInstance変数とinitializerRegion関数がグローバル実行コンテキストで宣言されていることです。initializerRegionしたがって、最後のコントロールは関数定義をオーバーライドします。これを修正するには、以下のようにすべてのコードを自己呼び出し関数でラップします。

(function () {
    var prmInstance = Sys.WebForms.PageRequestManager.getInstance();
    prmInstance.add_endRequest(function () {
        //you need to re-bind your jquery events here 
        initializerRegion();
    });

    var initializerRegion = function () {
        $('#<%= autoRegion.ClientID %>').autocomplete({
            source: function (request, response) {
                //......
            },
            //......
        });

        $(function () {
            initializerRegion();
        });
    })();

このコードは私にとってはうまくいきます:

ascx:

<script type="text/javascript">
    (function () {
        var prmInstance = Sys.WebForms.PageRequestManager.getInstance();
        prmInstance.add_endRequest(function () {
            initialize();
        });

        var initialize = function () {
            $("#<%= TextBox1.ClientID %>").on("keyup", function () {
                alert(this.value);
            });
        };

        $(function () {
            initialize();
        });
    })();
</script>
<asp:TextBox runat="server" ID="TextBox1" />

aspx:

<asp:ScriptManager runat="server" />

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <uc:WebUserControl2 runat="server" ID="ucWebUserControl2" />
        <asp:Button Text="Click Me" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
<hr />
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <uc:WebUserControl2 runat="server" ID="WebUserControl1" />
        <asp:Button Text="Click Me" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
于 2013-02-20T07:56:18.193 に答える
0

asp.nettoolkitオートコンプリートの代わりにjqueryを使用でき、必要な数のオートコンプリートを使用できるようになります

<script type="text/javascript">
    $(function () {
        $("#txtBoxWord").autocomplete({
            source: function (request, response) {

                $.ajax({
                    url: "AutoComplete.asmx/GetCompletionList",
                    data: "{ 'prefixText': '" + request.term + "','count':'10',contextKey:" + comboboxLang.GetSelectedIndex() + " }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        $(".ui-autocomplete").css("width", "340px");
                        if (comboboxLang.GetSelectedIndex() == 0) {
                            $(".ui-autocomplete").css("direction", "ltr");
                        }
                        if (comboboxLang.GetSelectedIndex() == 1) {
                            $(".ui-autocomplete").css("direction", "rtl");
                        }
                        response($.map(data.d, function (item) {
                            return {
                                value: item
                            };
                        }));
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            },
            minLength: 1

        });
    });
</script>

これは良い例です
asp.netでjqueryオートコンプリートを使用する3つの異なる方法

于 2013-02-21T07:02:51.150 に答える
0

コード

$(function () {
    initializerRegion();
});

あなたの問題の根源です。これは、一度だけ処理できる $document.Ready() に変換されます。したがって、この領域をユーザー コントロール レベルではなく、常にページ レベルにする必要があります。上記のシナリオでは、同じユーザー コントロールの 2 つのインスタンスがありますが、その代わりに、同様の初期化を行う 2 つの別個のユーザー コントロールがある場合、コードは失敗します。

ユーザー コントロールが追加されたページに上記のコードを配置すると、コードが正常に動作するはずです。

これがうまくいくかどうか教えてください。

于 2013-02-21T06:54:28.643 に答える