2017-06-22 106 views
0

元素删除类:无法从使用jQuery

<div class="row"> 
    <img src="image.png" class="download-image regular-image" /> 
<div class="options"> 
    <p>download</p> 
</div> 

<img src="image.png" class="download-image regular-image" /> 
<div class="options"> 
    <p>download</p> 
</div> 

和下面的代码来处理它(它改变了形象,基本上它是一个活跃的状态实现):

​​

此代码运行良好,但通过单击元素删除.current类时遇到问题。 g虽然我通过点击页面的任何地方像这样实现的:

$("html").click(function() { 
    $(".options").hide(); 
    $(".download-image").removeClass('current').attr("src", "image.png"); 
    $(".download-image").hover(function() { 
     $(this).attr("src", "image2.png"); 
    }, function() { 
     $(this).attr("src", "image.png"); 
    }); 
}); 

这一块不正是我想要的,但我也想有活动图像相同的行为了。我的尝试: 1.添加.currenthtml点击事件 2.创建相同的功能,但对于.current类 3.使用.on('click', '.current', function() 4.去就像这样:以上

$('.current').click(function() { 
    $(this).removeClass('current'); 
} 

没有为我工作。我错在哪里?任何帮助,将不胜感激。

+2

侦听器的回调函数中的this关键字附有该事件。你想要的HTML元素。尝试这个。 $('。current')。on('click',function(e){$(e.target).removeClass('current');}在移动设备上,atm格式是ass –

+0

你可以验证'$ )'解决了使用开发人员工具的问题?我认为我前一阵面临同样的问题,在这种情况下'$(this)'不是解析为'img'标签,而是周围的'div'。 – DotBert

+1

@DotBert it指向不完全是他想要的事件 –

回答

2

侦听器的回调函数中的this关键字具有附加的事件对象。你想要的HTML元素。您可以通过注销回调内部的值并查看对象来看到这一点。试试这个来获取HTML元素:

$('.current').on('click', function(e) {  
     $(e.target).removeClass('current'); 
} 

记下我给回调的参数。我相信this.target实际上可能是相同的对象,但我在移动ATM,所以无法验证。你可以通过console.log(this)注销值。声明

+0

不幸的是,它并没有为我工作,我可以通过console.log获取相应的元素,我甚至可以通过控制台像$('。current')。removeClass('current')'但它不起作用在我的点击事件中,无论是在cosole还是在代码中 –

0

解决方案非常明显,我感到羞耻我没有试过它,然后发布我的问题。我用.toggleClass()方法,现在我的click()事件是这样的:

$(".download-image").click(function (event) { 
    event.stopPropagation(); 
     $(this).next().toggle(); 
     $('.download-image').removeClass('current').attr('src', 'image.png'); 
     $(this).toggleClass("current").attr('src', 'image2.png'); 
     $(document).delegate('.current','mouseover',function() { 
      $(this).attr("src", "image2.png"); 
     }); 
     $(document).delegate('.current','mouseout',function() { 
      $(this).attr("src", "image2.png"); 
     }); 
    }); 

请注意,我用老的jQuery,如果你使用v3+,你应该.on()取代.delegate()方法,在注释中下文称。