2011-07-14 21 views
0

ここにはシナリオがあります:ページが読み込まれたときにサーバーにユーザーの権限を照会し、メニューバー。コードスニペット:document.readyでdocument.readyに作成された要素を操作する方法

$(function() { 
    //initialize the header buttons according to user's permissions 
    InitializeCurrentUser(); 
}); 

function InitializeCurrentUser() { 
    //get current user 
    $.ajax(
      { 
       url: "../Login/LoginService.asmx/GetCurrentUser", 
       success: function (result) { 
        var currentUserRoles = result.d; 
        output = '<ul class="Header"> '; 
        if ($.inArray("reports", currentUserRoles) > -1) { 
        output += '<a href="../Reports/Reports.aspx" ><li id="lnkReports">Reports </li></a>'; 
        } 
        //etc... 
        console.log('generating menu'); 
        $("#HeaderMenu").html(output); 
       } 
      }); 
} 

このスクリプトは、すべての私のページに含まれています。
今、私は現在のページを表す<li>を '現在の'クラスでマークしたいと思います。
私はmenubar.jsスクリプトにvar currentPageを追加し、各ページに(例えば、reportsPage.js中)しました:

$(function() { 

    //set this page as the current page; 
    currentPage = Enum.Page.Reports; 
}); 

とmenubar.js中:document.readyに呼び出される関数を:私は取得

function SetCurrentPage() { 
    $("#HeaderMenu li").removeClass('current'); 
    var liElement = null; 
    switch (currentPage) { 

     case Enum.Page.Reports: 
      liElement = $("#lnkReports"); 
      break; 
    } 

    console.log('adding a class to: '); 
    console.log(liElement); 
    liElement.addClass('current'); 
} 

ログは次のとおりです。

> generating menu 
> adding a class to: 
> [] 

ので、私が探している要素はまだDOMに追加されていないことが表示されます。
私はlive()を使用して、いくつかの解決策があるはずだと思いますが、私はそれは...

+0

私は非常に安全ではないようにアクセス許可に基づいてjavascriptでmenubarを作成 – ianbarker

+0

@ ianbarker-それを考える理由は何ですか? –

+0

jsソースを見ることで、アクセスが許可されていないもののURLを誰かが見やすいようにしているので、 – ianbarker

答えて

0

この問題の解決方法は、次のようなJavaScriptを生成することでした:

var BASE_URL = 'http://server/app/...' 

私のすべての私のURLは絶対的なものか、またはBASE_URLに関連するものです。そうすれば、現在のページに移動して現在のページにリンクするすべてのリンクを探し出すことができます(現在のページのURLを取り、BASE_URLを切り捨て、a[href="..."]

あなたの解決策としては、ページがロードされた後にSetCurrentPage()を実行し、「ロードメニュー」AJAXコールが戻った後に呼び出すべきだと思います。

2つのメソッドへの呼び出しを成功コールバックInitializeCurrentUser()でそれが動作するはずです

+0

を返すということです。私はSetCurrentPage()を成功コールバックの最後に移動しました。もちろん。 –

0

と呼ばれることは決してありませんlive('load',...)をしようとすると、あなたはcurrentPage

$(function() { 

    //set this page as the current page; 
    var currentPage = Enum.Page.Reports; 
}); 

varを忘れてしまったあなたの関数のSetCurrentPageは後に呼び出されていることを確認してくださいdom.readyイベント

+0

私はそれが問題だとは思わない。 'currentPage'はmenubar.jsで定義され、他のスクリプトでのみ参照されます。 –

+0

などで閉じられているのでしょうか? – genesis

+0

もちろん、そうでなければ他のスクリプトでは認識されません。問題はこの変数の値ではなく、値は正しく設定されています。問題は、セレクタが空の –

関連する問題