简化一组mouseover函数jquery
首先我要说的是,这是正常工作的,但我知道这不是最有效的编码方式,而且我缺乏如何做到这一点的知识/理解。
对于这个特定问题,我有 8 个不同的事件,它们使用 mouseover / mouseout 函数,其中隐藏了非上述悬停的其他类。我很好奇让它只用一个简单的代码块就可以处理无限量的事件。
任何帮助将不胜感激。到目前为止,这是我的代码...
function hoverBar() { $(".song1result").mouseover(function(){ $('.barReadout').not('.bar1').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar1').fadeTo('fast', 1.0, function() {}); }); $(".song2result").mouseover(function(){ $('.barReadout').not('.bar2').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar2').fadeTo('fast', 1.0, function() {}); }); $(".song3result").mouseover(function(){ $('.barReadout').not('.bar3').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar3').fadeTo('fast', 1.0, function() {}); }); $(".song4result").mouseover(function(){ $('.barReadout').not('.bar4').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar4').fadeTo('fast', 1.0, function() {}); }); $(".song5result").mouseover(function(){ $('.barReadout').not('.bar5').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar5').fadeTo('fast', 1.0, function() {}); }); $(".song6result").mouseover(function(){ $('.barReadout').not('.bar6').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar6').fadeTo('fast', 1.0, function() {}); }); $(".song7result").mouseover(function(){ $('.barReadout').not('.bar7').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar7').fadeTo('fast', 1.0, function() {}); }); $(".song8result").mouseover(function(){ $('.barReadout').not('.bar8').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar8').fadeTo('fast', 1.0, function() {}); }); }
谢谢!!马特
编辑:
我从沙德的回应中得到了正确的答案,尽管它需要一些修改。
这是我的工作解决方案:
function hoverBar2() { $('.songresult').mouseover(function(){ var ID=$(this).attr('id').replace('#',''); var ID2 = ID.replace('res',''); $('.barReadout').not('#bre' + ID2).fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ var ID=$(this).attr('id').replace('#bre',''); /// alert(ID); $('.barReadout').not('#bre' + ID).fadeTo('fast', 1.0, function() {}); }); }
Let me start by saying that this is working correctly, but I know it's not the most efficient way of coding it and I'm lacking the knowledge / understanding as to how to do this.
For this specific problem, i have 8 different events that are using a mouseover / mouseout function where it is hiding other classes that aren't the said hover. I'm curious as to have it work for say an infinite amount of events with just a simple block of code.
Any help would be greatly appreciated. Here is my code thus far...
function hoverBar() { $(".song1result").mouseover(function(){ $('.barReadout').not('.bar1').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar1').fadeTo('fast', 1.0, function() {}); }); $(".song2result").mouseover(function(){ $('.barReadout').not('.bar2').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar2').fadeTo('fast', 1.0, function() {}); }); $(".song3result").mouseover(function(){ $('.barReadout').not('.bar3').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar3').fadeTo('fast', 1.0, function() {}); }); $(".song4result").mouseover(function(){ $('.barReadout').not('.bar4').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar4').fadeTo('fast', 1.0, function() {}); }); $(".song5result").mouseover(function(){ $('.barReadout').not('.bar5').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar5').fadeTo('fast', 1.0, function() {}); }); $(".song6result").mouseover(function(){ $('.barReadout').not('.bar6').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar6').fadeTo('fast', 1.0, function() {}); }); $(".song7result").mouseover(function(){ $('.barReadout').not('.bar7').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar7').fadeTo('fast', 1.0, function() {}); }); $(".song8result").mouseover(function(){ $('.barReadout').not('.bar8').fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ $('.barReadout').not('.bar8').fadeTo('fast', 1.0, function() {}); }); }
Thanks!! Matt
Edit:
I was lead to the correct answer from Shad's response although it required a bit of tinkering.
Here's my working solution:
function hoverBar2() { $('.songresult').mouseover(function(){ var ID=$(this).attr('id').replace('#',''); var ID2 = ID.replace('res',''); $('.barReadout').not('#bre' + ID2).fadeTo('fast', 0.1, function() {}); }).mouseout(function(){ var ID=$(this).attr('id').replace('#bre',''); /// alert(ID); $('.barReadout').not('#bre' + ID).fadeTo('fast', 1.0, function() {}); }); }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您可以控制页面内容的呈现方式,那么我建议将标识号从类中移出并移至
id
seg 中,这将允许您编写 one所有实例的代码块:
If you have control of how the page content is rendered, then I would recommend moving the identifying numbers out of the classes and into the
id
s.e.g.
This will allow you to write one block of code for all instances:
我对此类问题的解决方案是这样的:
我使用 id-s 代替类:
id="songresult_1"
和id="bar_7"
My soltution for such problems is like this:
Instead of classes I use id-s:
id="songresult_1"
andid="bar_7"