禁用javascript中的选项/按钮

时间:2014-09-03 08:11:48

标签: javascript jquery

我有一个javascript代码如下:

p.onRowSelectExtraListener = function(e)
{
    var that = e.data.that;

    that.actions.selectedRows = that.table.getSelectedRows();
    var selected = [];
    var disableoption = false;
    $('#checkboxes input:checked').each(function() {
        selected.push($(this).attr('statusid'));
    });

    $.each(selected, function(index, value) {
        if (value == 27)
        {
            disableoption = true;
            return false;
        }
        console.log(disableoption);
       if(disableoption === true)
           {
           console.log("calling another function");
           //call p.getRowActions and disable the 3rd menu item/button.option.
           }
    });
};

p.getRowActions = function()
{
    var that = this;
    var addToGroupOptions = this.data.group.slice(0);
    console.log("in get row actions");
    if (this.canUnlock == 0)
        {
            console.log("In Super-IF loop");
        }

    addToGroupOptions.unshift({id: 'new', name: 'new group'});
                //TODO translate
                return [
                    {
                        option: {id: '4', name: 'add to group'},
                        options: addToGroupOptions,
                        type: 'ajax',
                        func: function(selectedRows, group)
                        {
                            that.onAddToGroup(selectedRows, group);
                        }
                    },
                    {
                        option: {id: '2', name: 'change rights issue'},
                        type: 'ajax',
                        func: function(selectedRows, rights) {
                            that.onChangeRights(selectedRows, rights);
                        }
                    },
                    {
                        option: {id: '1', name: 'change status'},
                        options: this.data.status,
                        type: 'ajax',
                        func: function(selectedRows, status) {
                            that.onChangeStatus(selectedRows, status);
                        }
                    },
                    {
                        option: {id: '3', name: 'edit'},
                        type: 'ajax',
                        func: function(selectedRows, edit) {
                            that.onChangeEdit(selectedRows, edit);
                        }
                    }
                ];
};

现在,在我加载页面时,第二个函数首先被调用/执行。 因此,我可以看到console.log("in get row actions");打印以及return[]语句下的4个选项作为我的应用程序中的按钮。

现在我的要求是:

要禁用第3个选项(带有id:1名称的选项:只要在第1个功能中设置disableoption = true,就会更改状态。

怎么可能?

如何访问和删除不同功能中定义的属性?

提前致谢。

1 个答案:

答案 0 :(得分:1)

p.getRowActions返回一个数组,访问数组中的对象并更改所需对象的属性,一旦修改了对象,就可以使用新对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)重新组装数组,然后返回这个更正数组到消耗其数据的组件,以将HTML对象添加到DOM。

另一种选择是在接收从p.getRowActions 返回的数组的函数末尾插入一个回调函数,这样你就可以在之后编辑中的对象。 strong>创建/渲染。

UPDATE(用于说明解决方案的伪代码):

function some_function_that_consumes_getRowActions_that_is_somewhere_else_that_I_dont_know() {
    var arrayOfHTMLOptions = p.getRowActions();

    //inserting options to DOM...

    var theOptionYouWant = document.getElementById('1');
    theOptionYouWant.disabled = true;
}

另一个选项(可能更优雅,取决于可能需要对此函数进行新更改的潜在即将发生的用例)是通过继承覆盖对象“p”的方法并构建自己的p.getRowActions返回你想要的选项数组,那么你必须更新接收这个数组的函数,这样它就可以指向新的“p子对象”,这样你就可以有一种更灵活的方式来改变p.getRowActions

以下是使用Javascript进行面向对象编程的一些很酷的阅读: http://marcelorjava.wordpress.com/2014/06/07/object-oriented-programming-with-java-and-javascript/