1

ポータル (Liferay) で使用する古い jQuery バージョン 1.2.6 コードを変換しています。以前は livequery プラグインを使用して、動的に追加された DOM オブジェクトにイベントを追加していました。これは、jQuery に組み込まれた機能 (on() 関数) になりました。私はそれを理解しました。

ただし、これらの動的にロードされたオブジェクトをロード時に変更できる (つまり、特定のイベントに関連付けられていない) ことを可能にする livequery の機能もありました。

$(".myTextBox").livequery(function() { $(this).val("initial value"); });

ajax ポートレットがポータルに読み込まれるときにコードを制御しないため、作成時にコンテンツを変更することはできません。

私は無駄にいくつかのことを試しました。これは私がうまくいくと思ったものですが、うまくいきません。jQuery をポートレットに追加して、ポートレット HTML の下部に読み込まれるようにし、jQuery をファイルに追加しました。

<footer-portlet-javascript>myscript.js</footer-portlet-javascript>

...

$(document).ready(function() {
    $(".myTextBox").val("initial value");
});

これはうまくいきません。alert($(".myTextBox")) を記述すると、オブジェクトが表示されますが、alert($(".myTextBox").val()) は未定義です。

どうすれば仕事を得ることができるかについてのアイデアはありますか?

4

3 に答える 3

1

私が読んだことから、ワイヤアップ関数の起動時にまだDOMに追加されていないアイテムにイベントをワイヤリングしたいと考えています。また、あなたが jquery の最新バージョンにアップグレードしていることも知りました。

jquery 1.7 以降を使用している場合は、.on() メソッドがこの機能を提供するはずです。1.2.6 から 1.7 の間のものを使用している場合、この動作を実現するには .live() メソッドを使用する必要があります。

$(".myTextBox").live('click', function(e){
    console.log(this.value);
});

必要に応じて、いくつかの AUI を混ぜて、Liferay の「allPortletsReady」公開イベントに接続することもできます。以下は、すべてのポートレットのロードが完了した後にアイテムを接続するために使用したコードの一部です。

//This is the AUI version of on document ready
//  and is just used to form a 'sandbox'(clojure)
//  around our code so the AUI object A is not modified
AUI().ready(function(A){
    //This essentially subscribes the provided function
    //  to the Liferay custom event 'allPortletsReady'
    //  so that when it's fired, the provided function
    //  will be called.
    Liferay.on('allPortletsReady', function(){
        //Do your initialization here
        myCustomPortletManager.init();

        //OR
        A.one("#mySelector").on('click', function(e){
            //do your work here
        });
        //Etc.
        //NOTE: jQuery ($) is valid inside this sandbox for our
        //instance.
    });
}):
于 2013-10-02T15:50:34.190 に答える