jQuery现在允许你使用
live来处理自定义事件,这是我在我最新的项目中使用的,并且非常方便.然而,我遇到了一个限制/错误,我希望有人能够帮助我.
当您触发事件时,您也可以传递其他数据数组,如下所示:
$(this).trigger('custom', ['foo', 'bar' ]);
如果你刚刚使用bind,你绝对可以访问这些变量.但是,如果您正在使用直播,事实证明,就我所知,您无法访问数据.我错了吗?还有另外一种方法吗?
这是一些演示代码来说明:
$().ready(function() {
$('button').click(function(){
$('<li>Totally new one</li>').appendTo('ul');
});
$('li').bind('custom', function(e, data) {
// this one works fine for old elements, but not for new ones
$('#output1').text('Bind custom from #' + e.target.id + '; ' + data);
}).live('custom', function(e, data) {
// this one triggers for old and new elements, but data is useless
$('#output2').text('Live custom from #' + e.target.id + '; ' + data);
}).live('click', function(){
$('div').text('');
// just using click count to illustrate passing data in the trigger
var clicks = $(this).data('clicks');
if(typeof clicks == 'undefined') clicks = 1;
$(this).trigger('custom', ['Times clicked: ' + clicks ]).data('clicks', clicks + 1);
});
});
和相关的HTML:
<button>Add</button>
<ul>
<li id="one">First Item</li>
<li id="two">Second Item</li>
<li id="three">Third Item</li>
</ul>
<div id="output1">Result 1</div>
<div id="output2">Result 2</div>
最佳答案 看起来最简单的方法可能是使用
http://docs.jquery.com/Events/trigger#eventdata中最后一个“alternate”示例中描述的格式.该示例使用对象文字指定事件对象,您可以在其中创建自定义属性.我也试过你上面描述的方法无济于事,但替代格式对我有用.所以不要打电话
$(this).trigger('custom', ['Times clicked: ' + clicks ])
尝试
$(this).trigger({type:'custom', clicks: clicks});
然后通过以下方式在“自定义”事件的事件处理程序中引用它:
"Times clicked: " + e.clicks;
希望有所帮助!