3

也许我疯了,但我无法获得<a>被点击的链接的 ID。安全性工作正常,并且 ID 属性中有明确的var内容。我错过了什么?

这是PHP -

<span id="<?php echo $load_post_content_nonce; ?>">
    <a href="<?php the_permalink(); ?>" id="<?php the_ID(); ?>" class="read-more" target="_blank">Read more...</a>
</span>

这是JS-

$(document).ready(function(){   

    $('a.read-more').live('click', function(e){

        e.preventDefault();

        var id = $(this).attr('id');
        var security = $(this).parent('span').attr('id');

    });

});

这是其中一个链接的 HTML 输出 -

<span id="b494a85e81">
    <a id="6623" class="read-more" href="http://test.dynedrewett.com/warring-parents-told-to-face-up-not-fall-out-over-contact-with-children/">Read more...</a>
</span>
4

4 回答 4

4

正如其他人指出的那样,自 jQuery 1.7 起.live()弃用。即使在旧版本中,.delegate()现在也是处理委托事件的首选方法。对于更高版本,on()这是处理委托事件的正确方法,如jQuery 文档中.live()所述,该文档解释了如何移植到.on().

确实适用于使用 AJAX 或其他方法准备好 DOM 后动态生成的内容,但您必须使用正确的语法。要处理对动态生成.read-more的链接的点击,请执行以下操作:

$(document).ready(function(){

    $(document).on('click', 'a.read-more', function(e) {
        e.preventDefault();

        var id = this.id;
        var security = $(this).parent('span').attr('id');
    });
});

$(document).on('click', 'a.read-more', function(e) {...})中,您可以替换document为任何静态父元素(在绑定处理程序时存在,并且保证“永远”存在,以处理对未来.read-more链接的点击;文档深入解释了用法。

在撰写本文时,jQuery 对象没有一个名为id;的属性。要访问元素的 ID,您必须:
- 使用.attr( 'id' )

- 使用本机 DOM 元素的id属性:$(element)[0].idelement.id

于 2012-09-04T11:11:50.113 回答
3

使用此代码

  $(document).ready(function(){ 
     $('a.read-more').live('click', function(e)
      {
          e.preventDefault();
          var id = this.id;
          var security = $(this).parent('span').id;
       }); 
    });

你会通过this.id找到id。

于 2012-09-04T10:19:29.707 回答
2

php 生成代码错误,这个脚本必须工作。

另外,尝试从“live”转换为“on”,因为:

.on() 方法将事件处理程序附加到 jQuery 对象中当前选定的元素集。从 jQuery 1.7 开始,.on() 方法提供了附加事件处理程序所需的所有功能。有关从旧 jQuery 事件方法转换的帮助,请参阅 .bind()、.delegate() 和 .live()。要删除与 .on() 绑定的事件,请参阅 .off()。要附加仅运行一次然后自行删除的事件,请参阅 .one()

http://api.jquery.com/on/

于 2012-09-04T10:07:06.013 回答
1

您的代码工作正常。

因为ID你也可以这样做:

$(document).ready(function(){   

    $('a.read-more').on('click', function(e){

        e.preventDefault();

        var id = this.id;
        var security = this.parent('span').id;

    });

});

不使用.attr().

错误肯定在您的PHP代码中。

于 2012-09-04T10:05:31.787 回答