javascript - 在对象文字中调用 jQuery 切换方法

标签 javascript jquery

我正在努力让下面的代码正常工作。问题是,当我将两个函数包装在括号 () 内的 editItems 属性中时,代码行为奇怪并分配 display: none编辑按钮的内联 css 属性。

如果我没有将两个函数括在括号内,则会收到 javascript 语法错误 function statements require a name

var shoppingList = {
    // Some code ...

    'init' : function() {


    // Capture toggle event on Edit Items button
    (shoppingList.$editButton).toggle(shoppingList.editItems);
    },


    'editItems' : function() {
        (function() {
            $(this).attr('value', 'Finish editing');
            (shoppingList.$ingrLinks).unbind('click', shoppingList.ingredients) // disable highlighting items
                                     .removeAttr('href');
            $('.editme').editable("enable");
            $('.editme').editable('http://localhost:8000/edit-ingredient/', {
                indicator : 'Saving...',
                tooltip   : 'Click to edit...',
                submit    : 'OK',
                cancel    : 'Cancel'
            });
        }), (function() {
            $(this).attr('value', 'Edit item');
            (shoppingList.$ingrLinks).attr('href', '#');
            $('.editme').editable("disable");
            (shoppingList.$ingrLinks).bind('click', shoppingList.ingredients) // re-enable highlighting items
        })
    }
}

$(document).ready(shoppingList.init);

但是,如果我像这样“直接”调用 toggle 事件,它会起作用:

var shoppingList = {
    // Some code ...

    'init' : function() {
        // Toggle event on Edit Items button
        (shoppingList.$editButton).toggle(
            function() {
            $(this).attr('value', 'Finish editing');
            (shoppingList.$ingrLinks).unbind('click', shoppingList.ingredients) // disable highlighting items
                                     .removeAttr('href');
            $('.editme').editable("enable");
            $('.editme').editable('http://localhost:8000/edit-ingredient/', {
                indicator : 'Saving...',
                tooltip   : 'Click to edit...',
                submit    : 'OK',
                cancel    : 'Cancel'
            });
        }, function() {
            $(this).attr('value', 'Edit item');
            (shoppingList.$ingrLinks).attr('href', '#');
            $('.editme').editable("disable");
            (shoppingList.$ingrLinks).bind('click', shoppingList.ingredients) // re-enable highlighting items
        });
    }
};

$(document).ready(shoppingList.init);

有没有一种方法可以将切换事件存储在 editItems 对象文字中,并且仍然按预期工作?

最佳答案

editItems 函数看起来很奇怪。我猜你只需要定义 2 个函数:startEditendEdit。并使用 toggle 将它们绑定(bind)在偶数和奇数点击上。

 var shoppingList = {
    // Some code ...

    init : function() {
        // Bind on edit button click
        this.$editButton.toggle(this.startEdit, this.endEdit);
    },


    startEdit : function() {
            $(this).attr('value', 'Finish editing');
            shoppingList.$ingrLinks.unbind('click', shoppingList.ingredients) // disable highlighting items
                                     .removeAttr('href');
            $('.editme').editable("enable");
            $('.editme').editable('http://localhost:8000/edit-ingredient/', {
                indicator : 'Saving...',
                tooltip   : 'Click to edit...',
                submit    : 'OK',
                cancel    : 'Cancel'
            }),
    endEdit: function() {
            $(this).attr('value', 'Edit item');
            (shoppingList.$ingrLinks).attr('href', '#');
            $('.editme').editable("disable");
            (shoppingList.$ingrLinks).bind('click', shoppingList.ingredients) // re-enable highlighting items
        })
};

$($.proxy(shoppingList, 'init'));

关于javascript - 在对象文字中调用 jQuery 切换方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435277/

相关文章:

javascript - AngularJS 1.2 到 1.3 clientWidth 不再正确

javascript - 在 Processmaker 中使用 Javascript 进行计算

javascript - 链接到响应式图像背景的特定位置

javascript - 调用 Javascript 函数时,如何设置自定义值 "this"?

jquery - 高级 jQuery 过滤 jQuery 数组

javascript - HTML bootstrap popover 函数

javascript - 在创建新对象时使用 JavaScript 中的数组值

javascript - 设置 clickedit 输出的样式

jquery - 如何检查div是否有脚本?

javascript - 以 GET 方法形式创建自定义 url