ここにはシナリオがあります:ページが読み込まれたときにサーバーにユーザーの権限を照会し、メニューバー。コードスニペット: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()
を使用して、いくつかの解決策があるはずだと思いますが、私はそれは...
私は非常に安全ではないようにアクセス許可に基づいてjavascriptでmenubarを作成 – ianbarker
@ ianbarker-それを考える理由は何ですか? –
jsソースを見ることで、アクセスが許可されていないもののURLを誰かが見やすいようにしているので、 – ianbarker