设置事件处理程序(提交,单击,按键等)时,将数据提供给处理程序并在处理程序中使用它的最快,最有效的方法是什么?我应该这样做:
$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;
});
我还有其他考虑因素吗?
答案 0 :(得分:10)
无论哪种方式都有效,你将相同的数据存储在略微的不同位置,尽管使用$.data()
可以减少浪费,而不需要创建jQuery对象,如下所示: / p>
$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;
});
答案 1 :(得分:4)
基本上是相同的东西,但是.click(在jQuery 1.4.3中添加)更加清晰:
$obj.click({name: value}, function(e) {
var name = e.data.name;
});
答案 2 :(得分:3)
有点晚,但也许对某人有用。
我想说这取决于。如果您的数据在创建事件处理程序(或者您可以从代码的其他区域到达的对象)时是最终的,那么第二种方法就可以了。
另一方面,如果使用$ .data()函数,您将始终引用实际数据。如果在触发事件之前可能更改了数据。
答案 3 :(得分:0)
还有另一种方法,它更好,因为您可以通过'this'子句访问数据属性:
var tst = {
a:1,
b:2,
clickHandler: function(e) {
alert(this.a);
alert($(e.target).attr('id'));
}
};
$('#btn').click(tst.clickHandler.bind(tst));