也许我疯了,但我无法获得被点击的<a>
链接的ID。安全var
工作正常,ID属性中有明确的内容。我错过了什么?
这是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>
答案 0 :(得分:4)
正如其他人所指出的,从jQuery 1.7开始,.live()
已弃用。即使在旧版本中,.delegate()
现在也是处理委托事件的首选方法。对于更高版本,on()
是处理委派事件的正确方法,如jQuery docs for .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
替换为任何 static 父元素(在处理程序绑定时存在的元素,并保证永远存在) ',为了处理未来.read-more
链接的点击;文档深入解释了用法。
截至本文撰写时,jQuery对象does not have a property named id
;要访问元素的ID,您必须:
- 使用.attr( 'id' )
或
- 使用原生DOM元素的id
属性:$(element)[0].id
或element.id
答案 1 :(得分: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。
答案 2 :(得分:2)
Php生成的代码错误,此脚本必须正常工作。
另外,尝试从“live”转换为“on”,因为:
.on()方法将事件处理程序附加到当前选定的集合 jQuery对象中的元素。从jQuery 1.7开始,使用.on()方法 提供附加事件处理程序所需的所有功能。对于 帮助转换旧的jQuery事件方法,请参阅.bind(), .delegate()和.live()。要删除与.on()绑定的事件,请参阅 .off()。附加仅运行一次然后删除的事件 本身,见.one()
答案 3 :(得分: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
代码。