0

Prototype のライブラリを使用して、AJAX に基づく CMS システムを作成しようとしています。ページの読み込み時に、JSON 経由で返されたページの HTML、ページ タイトル、および追加の Javascript を取得し、メイン領域の HTML を更新します。また、特定の ID がクリックされるのをリッスンするイベント リスナーもあります。

リスナーが働いている、

var TabMenu = {
selectedTab: 'main',
showTab: function(pid) { alert(pid); alert($(pid)); 
    $(pid).addClassName('selected'); this.selectedTab = pid;
    $(this.defaultTab).removeClassName('selected');
}};

読み込み後、新しいタブの 1 つをクリックすると、最初の「テスト」アラートは要素の ID を正常にアラートしますが、2 番目のアラート ($(pid)) は null を返します。AJAX リクエストによって返された HTML が評価されておらず、DOM に追加されていないと推測することしかできません。

関連する AJAX 呼び出しは次のとおりです。

        new Ajax.Request(url, {
        onSuccess: function(t) {
            data = t.responseText.evalJSON();
            Page.update(data.html, data.title, data.js);
            Page.destroyLoader();
        }
    });

そして、ここに更新機能があります:

update: function(data, title, js) {
    document.title = Global.title + title;
    if (title != "") { $('HEADING').update(title); }
    $('MAIN').update(data);
    if (js != "") {
        var nuJS = new Element('script', { type: 'text/javascript' }).update(js);
        $('MAIN').insert({ top: nuJS });
    }
}

これを機能させる方法についてのアイデアはありますか?

4

2 に答える 2

0

ajaxリクエストはいつトリガーされますか?タブをクリックするとトリガーされますか?その場合、showTabデータがDOMに挿入される前に関数がトリガーされます。

Firebugがある場合は、ajax呼び出しが終了した後、コンソールを使用してhtmlデータを選択し、何が得られるかを確認してください。また、firebugのhtmlタブを使用して、データがDOMに挿入されているかどうかを確認することもできます。

また、pid値に設定されているパラメーターを取得しても、それはDOMに存在する実際のIDを参照していますか?

于 2010-02-01T09:56:35.970 に答える
0

あなたのコードと上記のコメントから。あなたの計画は、ページがすぐに読み込まれた後にすべてのタブを読み込むことだと思います。そして、css を使用してそれらをすべて非表示にします。ユーザーがタブをクリックするまで待って、「選択された」ものだけを表示しますよね?

つまり、次のように変更する必要があります。

$('MAIN').update(data);

のようなものに

$('MAIN').update({after: data});

したがって、既存のものは上書きされません。また、document.title と eval js のコードを showTab 関数に移動することを忘れないでください。

JavaScript の評価では、js を data.html に挿入して、代わりにこれを使用できます。

$('MAIN').innerHTML.evalScripts();
于 2010-02-17T14:50:26.027 に答える