jquery’Click’事件的奇怪行为

我有一个锚标记

  • Click me
  • Click me
  • Click me
  • 我想通过点击锚标签执行一些代码。我使用过

     $('a').click(function(){ //do something.. }); 

    但它没有成功。 所以我用过

     $('a').on('click',function(){ //do something.. }); 

    我也用过

     $('a').bind('click',function(){ //do something.. }); 

    但他们也没有用。 对我有用的是

     $('a').live('click',function(){ //do something.. }); 

    为什么会这样……当所有人都应该表现出同样的行为时。

    .click.bind没有事件委托。 您在将元素加载到DOM之前执行它们。 将.click移动到锚点下方或将其添加到DOM ready事件中:

     $(document).ready(function() { $('a').click(function(){ //do something.. }); }); 

    要么

     $(function() { $('a').click(function(){ //do something.. }); }); 

    以上两者都有相同的结果,使用您发现更易读/可维护的任何一个。

    .live现在正在使用,因为它使用事件委托,根据外行人的观点,类似于

     $(document).on('click', 'a', function(){ //do something.. }); 

    请注意, .live在jQuery 1.7+中已弃用,因此您应该更喜欢.on方法进行事件委派。 另请注意, .on仅在传递后代selector参数的父元素绑定时才具有事件委托效果。

    这是$(document).ready()小提琴

    编辑:根据OP的评论,由于您要动态添加锚标签,因此您有两个选项:事件委派(推荐)或每次添加新内容时重新绑定事件。

    在jQuery 1.7+中,您应该使用.on()进行事件委派:

     $('#AnchorsDivID').on('click', 'a', function(){ //do something.. }); 

    这是一个带有.on事件委托和Ajax的全function现场演示:
    的jsfiddle

    在jQuery <= 1.6.4中,您必须使用.delegate().live() 。 在.live() jQuery API页面中显示了哪个为每个版本提供了更好的可用性和性能。

    对于jQuery> = 1.4.3 <1.7:

     $('#AnchorsDivID').delegate('a', 'click', function(){ //do something.. }); 

    这段代码与你的html完全一致:

     $(document).ready(function(){ $('a').on('click', function(e){ console.log('some action.'); }); }); 

    PS此代码将在所有链接上运行!