我的html如下所示:
<li>
<div>
<p class="delete">
<a href="#">X</a>
</p>
</div>
<div class="friend-avatar">
<img src="" />
</div>
</li>
单击“delete”段落中的锚标记后,我将显示一个弹出(使用jQuery-警报),如果用户选择“是”,我希望包含此内容的整个li单击a以淡出,然后删除它。我试着做这样的事,但是李小龙依然可见:
$(function() {
$(".delete a").click( function(){
jConfirm('Remove friend?', 'Confirmation Dialog',
function(r){
if(r==true){
parent_li = $(this).closest('li');
parent_li.fadeOut('slow', function() {$(this).remove();});
}
});
return false;
});
});
我做错什么了?
更新
刚刚注意到,当我单击这个“删除”链接时,firebug会显示以下错误:
a.ownerDocument is undefined
/site_media/jquery/jquery-1.4.2.js
Line 117
发布于 2010-07-28 23:31:05
我对这个插件并不熟悉,但我的猜测是this
并不是指单击的元素,而是指对话框。
尝试在this
之外的变量中引用jConfirm()
。
$(function() {
$(".delete a").click( function() {
// reference the <a> element
var $a = $(this);
jConfirm('Remove friend?', 'Confirmation Dialog',
function(r){
if(r==true){
// use a to find the closest <li>
var parent_li = $a.closest('li');
parent_li.fadeOut('slow', function() {$(this).remove();});
}
});
return false;
});
});
发布于 2010-07-28 23:31:05
您对parent_li的引用超出了变量的范围。
为了兴趣起见,我会将调用更改为它自己的函数,这样我就可以重用它。
$(function() {
$(".delete a").click( function(){
jConfirm('Remove friend?', 'Confirmation Dialog',
function(r){
if(r==true){
parent_li = $(this).parents('li');
$(parent_li).fadeOut('slow', removeLi(parent_li));
}
});
return false;
});
});
function removeLi(parent_li){
$(parent_li).remove();
};
发布于 2010-07-28 23:36:46
您应该将$(this)存储在变量中,因为弹出式函数中的作用域会发生变化。
做以下事情:
$(function() {
$(".delete a").click( function(){
var $link = $(this); // Here's the magic
jConfirm('Remove friend?', 'Confirmation Dialog',
function(r){
if(r==true){
parent_li = $link.closest('li');
parent_li.fadeOut('slow', function() {$(this).remove();});
}
});
return false;
});
});
https://stackoverflow.com/questions/3358337
复制相似问题