daniel
问问题
7952 次
3 回答
3
使用事件委托 - 这意味着将点击绑定到某个容器并让它处理事件。然后,您可以查询 event.target 以查看它是否是被点击的锚点,那么您是否需要行为。出于多种原因,这更好。
- 更少的事件绑定到元素(性能)
- 添加/删除内容后无需重新绑定事件,因为容器保持不变并且将始终在那里处理冒泡的点击事件。
代码将类似于
$('#someContainer').click( function(ev){
var $el=$(ev.target);
if ( $el.is('a') ){
//do your stuff
}
});
请参阅此帖子以获取更多阅读
于 2008-11-28T07:26:56.093 回答
1
<a> 丢失了 onclick 处理程序,因为它正在被删除。当您重新添加 HTML 时,它不会返回该处理程序。
无需过多地重新排列代码,您就可以创建一个函数来充当您的点击处理程序。
function playerClicked() {
// replace the <a> tag from the previous media player installation
if (previousplayerlocation != null) {
$("#" + previousplayerlocation + " .storyplayer")
.html(graboldcode)
.click(playerClicked); // Re-add the onclick handler
}
// now remember this installation's <a> tag before it's replaced
graboldcode = $(this).parent().html();
// remember where I grabbed this <a> tag from
previousplayerlocation = $(this).parents("div.storylisting").attr("id");
// replaces the <a> tag with the media player.
$(this).media({width: 190,height: 30});
return false;
}
$(".storyplayer a").bind("click", playerClicked);
于 2008-11-28T07:17:29.653 回答
0
看看livequery插件。使用此插件,您甚至可以为 DOM 中不可用的元素绑定事件侦听器。
$('a').livequery('click', function(){
});
插件监控 DOM 并绑定监听器。您也可以自己强制评估:
$.livequery.run()
其他一些强大的功能:
您可以使侦听器过期:
$('a').livequery.expire('click')
您可以注册 onmatch 侦听器:
$('a').livequery(
function(){ onmatchHandler},
function(){ onmismatchHandler }
);
于 2008-11-28T14:32:06.567 回答