0

jQuery と IScriptControls を組み合わせて使用​​していますが、どの jQuery 関数でも $find を使用できないようです。

たとえば、次のようにします。$get と $ は使用できますが、$find は使用できません。

    // Configure the toolbar groups
    $(document).ready(function()
        {

            // Returns the control
            var works1 = $get("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
            var works2 = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");

            // Returns null
            var broken = $find("ctl00_ContentPlaceHolder1_uwt_MainNavigation");

        }
    );

ページがロードされたら、MainNavigation タブ コントロールから選択したタブを取得する必要があるメソッドを呼び出す必要があります (これは Infragistics UltraWebTab ですが、Infragistics の問題ではないことを確認するために独自の IScriptControls でテストしました)。

タブ インデックスは、$find を使用してのみ取得できます。$find を使用できない理由は何ですか? $find の方法でコントロールを取得するにはどうすればよいですか?

// Configure the toolbar groups
$(document).ready(function()
    {

        // Get the UltraWebTab Control
        var tabControl = $find("<%=uwt_MainNavigation.ClientID %>");
        var index = tabControl.get_selectedTab();
        ToolBarShowGroup(index);

    }
);

上記は、ToolBarShowGroup が jQuery 関数を呼び出してツールバーを表示および非表示にする、私がやろうとしていることです。

また、私が聞いている間、IScript コントロールに関して誰かが私の用語を修正できれば..それらは「Ajax コントロール」または「Extender コントロール」ですか、それとも何ですか? 私はそれらがすべて異なるものと呼ばれているのを見てきました。コントロールには、古い MyCompany.MyControl.prototype 宣言があります。

EDIT : 以下は完全に機能しますが、 $(document).ready 関数内にあるほうがよいでしょう。

// Use the Ajax Load Methods
function pageLoad()
{
    var ajaxControl= $find("<%=myControlHere.ClientID %>");
}
4

5 に答える 5

2

Ajax コントロールが構築される前に、jQuery の $(document).ready が起動するようです。

これを機能させる方法は、Ajax フレームワークによって起動される次の JavaScript メソッドを使用することでした。

function pageLoad()
{
    // $find() works in here
}

pageLoad() は $(document).ready の後に起動するため、jQuery の関数が起動してドキュメントの準備ができたことが示されているように見えますが、実際にはすべての準備ができているわけではありませんか?

于 2009-10-16T08:26:52.247 に答える
1

document.ready の外で $find 関数を再定義するのはどうですか

var FIND_FUNCTION = $find;

$(document.ready) { 
   ...
   var result = FIND_FUNCTION("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
}

これにより、発生していると思われるスコープの問題が修正されるはずです。

于 2009-10-16T01:00:24.240 に答える
1

関数を再定義する他のライブラリでjQueryを使用しているようです$。の代わりに常に使用することを強制するnoConflict関数を使用できます。jQuery$

jQuery.noConflict();


// Configure the toolbar groups
jQuery(document).ready(function() {
    // Returns the control
    var works1 = $get("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
    var works2 = jQuery("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");
    // Returns null
    var broken = $find("ctl00_ContentPlaceHolder1_uwt_MainNavigation");
});

jQuery(document).ready(function() {
    // Get the UltraWebTab Control
    var tabControl = $find("<%=uwt_MainNavigation.ClientID %>");
    var index = tabControl.get_selectedTab();
    ToolBarShowGroup(index);
});
于 2009-10-15T15:20:38.187 に答える
0

これはうまくいくはずです:

$(document).find("#elementid")

または、イベント ハンドラー内で呼び出している場合は、さらに優れています。

$(this).find("#elementid")

find 関数のアイデアは、親コントロールの子孫を見つけることだと思います。そのため、親を指定しないと機能しないようです。

ただし、見た目からすると、何をしているのかに find を使用する必要はありません。なぜ単純にこれをしないのですか?

$("#elementid")
于 2009-10-15T15:47:11.890 に答える
0

なぜこの問題が発生しているのかわかりませんが、代わりに jQuery オブジェクトを使用してみませんか? お気に入り:

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation");

または、jQuery オブジェクトの代わりに DOM オブジェクトが必要な場合は、次のように記述できます。

var mainNav = $("#ctl00_ContentPlaceHolder1_uwt_MainNavigation")[0];
于 2009-10-15T15:35:17.497 に答える