jQuery.data与eventData

jQuery.data与eventData,jquery,events,Jquery,Events,设置事件处理程序(提交、单击、按键等)时,将数据获取到处理程序并在处理程序中使用它的最快和最有效的方法是什么?我应该做一些类似于: $obj.data({name: value, ...}); $obj.click(function(e){ var $this = $(e.target), name = $this.data(name); }); 还是这样做更好: $obj.bind('click', {name: value}, function(e) { var $thi

设置事件处理程序(提交、单击、按键等)时,将数据获取到处理程序并在处理程序中使用它的最快和最有效的方法是什么?我应该做一些类似于:

$obj.data({name: value, ...});

$obj.click(function(e){
  var $this = $(e.target),
    name = $this.data(name);
});
还是这样做更好:

$obj.bind('click', {name: value}, function(e) {
  var $this = $(e.target),
    name = e.data.name;
});
$obj.data({ name: value });
$obj.click(function(e) {
  var name = $.data(this, 'name');
});

还有其他需要注意的事项吗?

无论哪种方法都有效,您将相同的数据存储在一个稍有不同的位置,尽管第一种方法在不创建jQuery对象的情况下使用会减少浪费,如下所示:

$obj.bind('click', {name: value}, function(e) {
  var $this = $(e.target),
    name = e.data.name;
});
$obj.data({ name: value });
$obj.click(function(e) {
  var name = $.data(this, 'name');
});
就个人而言,我发现第二个版本更干净,它的等效版本总体上也更短:

$obj.bind('click', {name: value}, function(e) {
   var name = e.data.name;
});

本质上是一样的,但即使有一点清洁(添加):


有点晚了,但可能对某人有用

我认为这要视情况而定。如果您的数据在创建事件处理程序(或对象,您可以从代码的其他区域访问)时是最终的,那么第二种方法就可以了


另一方面,如果使用$.data()函数,则始终会引用实际数据。如果数据可能在触发事件之前更改

还有另一种方法,它更好,因为您可以通过“this”子句访问数据属性:

        var tst = {
            a:1, 
            b:2, 
            clickHandler: function(e) {
                alert(this.a);
                alert($(e.target).attr('id'));
            }
        };

        $('#btn').click(tst.clickHandler.bind(tst));

是的,我想对于这个例子来说,它是不相关的,我只是把它从我的代码中删掉,我发现我几乎总是在创建它。