用于保存用户操作中的值的JavaScript机制

用于保存用户操作中的值的JavaScript机制,javascript,jquery,colorbox,javascript-objects,Javascript,Jquery,Colorbox,Javascript Objects,我已经创建了一个JavaScript对象,用于保存一个由用户在数据库中检查checbox所设置的值 我对jQuery和JavaScript编程“正确的方式”比较陌生,我希望确保下面捕获用户检查操作的机制是JavaScript的最佳实践。此外,由于我使用jQuery,有没有一种更简单的方法来保持我应该使用的操作 function Check() { this.Checked = false; } obj = new Check; $(document).ready(function()

我已经创建了一个JavaScript对象,用于保存一个由用户在数据库中检查checbox所设置的值

我对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();
            });
        }
    });
});
函数检查(){
这个.Checked=false;
}
obj=新支票;
$(文档).ready(函数(){
$('.cboxelement').colorbox({html:'Inactivate Machine'});
$(document).bind('cbox_cleanup',function(){
obj.Checked=$.fn.colorbox.getContent().children(“#停用”).is(“:Checked”);
});
$(document).bind('cbox_closed',function(){
if($($.fn.colorbox.element()).attr('id').match('Remove')&&obj.Checked){
var行=$($.fn.colorbox.element()).parents('tr');
行淡出(1000,函数(){
row.remove();
});
}
});
});
  • $($.fn.colorbox.element())
    是冗余的
    $.fn.colorbox.element()
    已经是jquery元素

  • 通常(至少在我观看的示例中)在引用jquery元素的变量前面加上
    $

    因此,
    var$rows=$.fn.colorbox.element().parents('tr')
    立即给出了它正在引用jquery元素的想法

  • 我担心,
    fadeOut
    对IE6中的行不起作用(如果我没有记错的话)。在删除
    之前,您应该能够隐藏
    中的所有内容


我不知道colorbox的最佳用途,因此无法帮助您进行“简化”操作。

您可以在闭包中捕获引用,这样可以避免全局数据,并且更容易进行多次检查。但是,在本例中,它似乎绑定到单个colorbox,因此我不知道是否可以使用多个实例

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.

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

$('body').data('colorbox.checked',true);
随后,您将通过以下方式检索该值:

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

您可以在任何jquery对象上运行
data()
方法。我认为这是jQuery的最佳实践。

不幸的是,$.fn.colorbox.element()不会返回jQuery元素,但会在下一版本中返回。我将查看IE6中的淡出功能,谢谢您的提醒。我最担心的是使用自定义Check()对象来捕获用户的操作。从技术上讲,这将是“预先添加
$
”ColorBox动态呈现其内容,因此每页只有on。我需要阅读更多关于闭包的内容,但这似乎比运行全局变量要干净得多。我不知道jQuery的
data()
方法。鉴于颜色盒的性质,它似乎最适合我的特殊用途。在将值附加到“名称空间”时,有什么指导吗?@ahsteele:嗯,“名称空间”实际上是基于字符串的(因此在我的回答中用引号括起来)。基本上,您正在向对象添加一个键->值对。类似于(仅用于演示目的):
document.body.data['colorbox.checked']=true
。这样,其他插件就不会意外地覆盖您的键->值对(使用“checked”这样的通用变量是很有可能的)。您也可以合法地这样做:
$('body').data('colorbox\u checked',true)
。而不是点符号。就像我说的,它是“名称空间”。祝你好运