1

我创建了一个 JavaScript 对象来保存由用户检查 ColorBox 中的复选框设置的

我对 jQuery 和“正确的方式”编程 JavaScript 比较陌生,并希望确保以下用于捕获用户检查操作的机制是 JavaScript 的最佳实践。此外,由于我正在使用 jQuery,是否有更简单的方法来保持我应该使用的操作?

function Check() {
    this.Checked = false;
}

obj = new Check;

$(document).ready(function() {
    $('.cboxelement').colorbox({ html: '<input id="inactivate" type="checkbox" name="inactivatemachine">&nbsp;<label for="inactivate">Inactivate Machine</label>' });

    $(document).bind('cbox_cleanup', function() {
        obj.Checked = $.fn.colorbox.getContent().children('#inactivate').is(':checked');
    });

    $(document).bind('cbox_closed', function() {
        if ($($.fn.colorbox.element()).attr('id').match('Remove') && obj.Checked) {
            var row = $($.fn.colorbox.element()).parents('tr');
            row.fadeOut(1000, function() {
                row.remove();
            });
        }
    });
});
4

3 回答 3

2

就个人而言,我会使用 jQuery 的内置data()方法直接将值附加到对象。我并不完全确定您要做什么,但是,例如,您可以将值附加到 DOM 中的“命名空间”以供以后使用。

$('body').data('colorbox.checked',true);

然后,您稍后将通过以下方式检索该值:

var isChecked = $('body').data('colorbox.checked');

data()您在任何 jquery 对象上运行该方法。我会说这是 jQuery 的最佳实践。

于 2009-11-05T19:13:40.313 回答
1

您可以在闭包中捕获引用,这样可以避免全局数据并更容易进行多个检查。但是,在这种情况下,它似乎绑定到单个颜色框,所以我不知道您是否可以有用地拥有多个实例。

function Check() {
    this.Checked = false;

    var obj = this; // 'this' doesn't get preserved in closures

    $(document).ready(function() {
       ... as before
    )};
}

var check = new Check; // Still need to store a reference somewhere.
于 2009-11-05T19:04:36.290 回答
0
  • $($.fn.colorbox.element())是多余的。$.fn.colorbox.element()已经是一个 jquery 元素。

  • $将 a添加到引用 jquery 元素的变量之前是很常见的(至少在我观看的示例中) 。
    因此,var $rows = $.fn.colorbox.element().parents('tr');立即给出它正在引用 jquery 元素的想法。

  • 恐怕fadeOut不能在 IE6 中的行上工作(如果我没记错的话)。您应该能够<tr>在删除之前隐藏其中的所有内容。

对“简化”这件事无能为力,因为我不知道彩盒的最佳用途。

于 2009-11-05T18:39:20.337 回答