如何在运行时禁用JqGrid中的选项卡?

时间:2010-09-29 17:35:28

标签: javascript jquery jqgrid

两个默认网格防御:

initialise(){
$("#ExpenseTable").jqGrid({
    datatype : "local",
    mtype : 'GET',
    colModel : [ {name:'expnsId',label:'ID', width:150 }, 
                 {name:'userName',label:'NAME', width:150 },
                 {name:'catName',label:'CATEGORY', width:150 },
                 {name:'date',label:'DATE', width:150 },
                 {name:'amount',label:'AMOUNT', width:150 },
                 {name:'status',label:'STATUS', width:150 }],
    pager : '#ExpPager',
    rowNum : 10,
    rowList : [ 10, 20, 30 ],
    sortname : 'invid',
    sortorder : 'desc',
    viewrecords : true,
    autowidth : false,
    caption : 'Expenses Details',
    onSelectRow : function(expnsId) { dispExpensData(expnsId); }
    }); 
$("#tabs").tabs();
getTokens();//Gets the tokens for the logged in user.
refreshExpenseGrid();//Populates data to the grid
dispLeaveGrid();// It ll call the next default grid
 }
 }

$("#LeaveTable").jqGrid({
    datatype : "local",
    mtype : 'GET',
    colModel : [ {name:'leaveId',label:'ID', width:150 }, 
                 {name:'userName',label:'NAME', width:150 },
                 {name:'fdate',label:'DATE', width:150 },
                         {name:'tdate',label:'DATE', width:150 }
                 {name:'status',label:'STATUS', width:150 }],
    pager : '#ExpPager',
    rowNum : 10,
    rowList : [ 10, 20, 30 ],
    sortname : 'invid',
    sortorder : 'desc',
    viewrecords : true,
    autowidth : false,
    caption : 'Leave Applications',
    onSelectRow : function(leaveId) { displeaveData(leaveId); }
    }); 
refreshLeaveGrid();//Populates data to the grid
securedUI();//This ll call the below function, to check whether the remaining tabs can be visible or not

安全的用户界面功能

function securedUI(){


var secToken = "DELETEUSER";
if(!checkRoleToken(secToken)){//If users dont have token to delete user, the buttons ll be disabled
    $('#expDelete').attr('disabled', 'disabled');
    $('#lveDelete').attr('disabled', 'disabled');
    $('#delUser').attr('disabled', 'disabled');
    $('#roleDel').attr('disabled', 'disabled');
    $('#tokenDel').attr('disabled', 'disabled');
}


var secToken= "VIEWUSER";
if(checkRoleToken(secToken)){
    showUserdetails();//3rd Grid Defn:Contains the table definition for user grid.
    initialiseRole();//4th Grid Defn: Role grid
    showtokens();//5th Grid Defn: token grid
}

检查令牌:

function checkRoleToken(newToken){
for( var i = 0; i<tokens.length; i++ ){
    var token = tokens[i];//Tokens is like cache, which contains all the tokens that are assigned for the current user.
    if(newToken == token.tokenName){
        return true;
    }
}
return false;
 }

html页面:

<script type="text/javascript">
$(document).ready(function() {
    initialise();
});
</script>

LeaveTable是第二个网格,我还有3个网格。但我不想向所有用户展示它们,而管理员用户应该能够看到它们。令牌是找到用户有权在应用程序中执行任何操作的关键。为用户分配的标记将加载到客户端缓存,如数组tokens

每个功能,例如ADDDELETEUPDATE&amp; VIEW在存储在变量中的函数的开头有它们的标记。该标记变量将作为参数发送到CheckToken()。它会在令牌缓存中检查该令牌。它将返回truefalse。根据该结果,操作将取消或继续。

在上面的代码中,在LeaveTable网格防御结束时,您可以看到函数调用securedUI();。在这个功能里面,我正在做两件事。 1.禁用删除按钮,2。禁用3rd4th&amp; 5th网格,适用于那些没有令牌的人DELETEUSER&amp; VIEWUSER

实际上我现在得到的是3rd4th&amp;对于拥有令牌5th的用户,不会显示VIEWUSER个网格。查看函数securedUI()&amp; checkToken(),他们应该做什么! securedUI()有VIEWUSER标记和当前用户,因此checkToken()应返回true,因此它应该进入if块并执行if块内的函数调用。但它不这样做。我无法弄清楚我哪里出错了。

所以,我打开了萤火虫并逐步检查了它。奇怪的是,现在它进入if块并显示管理员用户的网格。现在我觉得它工作了然后我关掉了萤火虫并再次重新加载页面。哎呀,还有3个剩余的网格没有显示。你现在能够对我的问题有所了解!!!

任何建议!!!

1 个答案:

答案 0 :(得分:2)

在我看来,您应该将所有JavaScript代码放在jQuery(document).ready句柄中:jQuery(document).ready(function() {/* place your code here */});

如果您确实使用此句柄,请发布包含完整HTML代码的示例的更多完整代码。您可以减少代码示例以使示例更紧凑。重要的只是问题留在代码中,每个人都可以重现问题。