1
4

3 回答 3

3

使用事件委托 - 这意味着将点击绑定到某个容器并让它处理事件。然后,您可以查询 event.target 以查看它是否是被点击的锚点,那么您是否需要行为。出于多种原因,这更好。

  1. 更少的事件绑定到元素(性能)
  2. 添加/删除内容后无需重新绑定事件,因为容器保持不变并且将始终在那里处理冒泡的点击事件。

代码将类似于

$('#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 回答