如何通过id为多个div创建一个jquery mouseover?

时间:2013-06-22 02:06:58

标签: jquery mouseenter

您好我正在尝试将一系列鼠标悬停事件分组到一个,但我对javascript很新,并且真的很困惑。我有5个按钮,如下一个,我想创建一个功能,包括所有。我将div的类用于此处未包含的另一个函数。我相信我必须使用id进行鼠标悬停。

$('#trigger1').mouseover(function(){ 
    $('#roll1r').fadeOut('slow');
});

http://jsfiddle.net/alexnode/fCw6y/2/

我使用条件来定义我想要隐藏的元素,但我不确定如何定义变量并将它们传递给淡出函数。我已经尝试了所有类型的语法将其作为字符串传递但我不明白是什么问题。

$('#trigger1, #trigger2, #trigger3').mouseover(function () {
      var roll = null;
      var that = $(this);


        if (that==="#trigger1"){roll = "$('#roll1r')";}
        else if(that==="#trigger2"){roll ="$('#roll2r')";}
        else if(that==="#trigger3"){roll = "$('#roll3r')";}
        console.log(roll);
        roll.fadeOut({
            duration:300,
           // fail: that.hide()
        });
    });

     <div class="buttoncontainer" >

          <div id="buttonbg1">
          <img id="roll1" class="translatebuttons" src="images/buttonover.png" alt="Translation games">
<img id="roll1r" class="translatebuttons" src="images/button.png" alt="Translation games">
            <div class="translatebuttons" id="tr1"></div>
            <div id="trigger1" class="translatebuttons"></div>
            </div>

          <div id="buttonbg2">
            <img id="roll2" class="translatebuttons" src="images/buttonover.png" alt="Translation games"> <img id="roll2r" class="translatebuttons" src="images/button.png" alt="Translation games">
            <div class="translatebuttons" id="tr2"></div>
            <div id="trigger2" class="translatebuttons"></div>
          </div>


          <div id="buttonbg3">
            <img id="roll3" class="translatebuttons"  src="images/buttonover.png" alt="Translation games"> <img id="roll3r" src="images/button.png" alt="Translation games">
            <div class="translatebuttons" id="tr3"></div>
            <div id="trigger3" class="translatebuttons"></div>
            </div>

      </div>

5 个答案:

答案 0 :(得分:2)

你正在寻找这样的东西吗?一种方法是只使用一个处理程序简化代码:

   $('[id^=trigger]').hover(function () { 
       var roll = $(this.id.replace(/trigger/, '#roll') + 'r');
       roll.fadeToggle({
        duration: 300
      });
   });

Fiddle

  • 使用 startswith 选择器选择所有触发器
  • 使用 hover 作为mouseenter / mouseleave的快捷方式
  • 使用简单的正则表达式重新计算来计算相应卷的ID
  • 使用 fadeToggle 切换滚动的淡化状态。

答案 1 :(得分:1)

嗯,我唯一能看到的问题......

你的元素周围是“”,它们是对象而非字符串......

所以它应该......

if (that==="#trigger1"){roll = $('#roll1r');}
    else if(that==="#trigger2"){roll =$('#roll2r');}
    else if(that==="#trigger3"){roll = $('#roll3r');}

答案 2 :(得分:1)

您的代码中存在两个主要问题。

第一个是条件。而不是做:

that==="#trigger1"

您可以使用jquery函数.is()

that.is("#trigger1")

第二个是你使用字符串而不是jQuery对象。每个roll应该是这样的:

roll = $('#roll1r');

无论如何,我清理了一下你的代码并回来了:http://jsfiddle.net/fCw6y/10/

答案 3 :(得分:1)

为了制作更通用的编码,您可以使用DOM traversing functions,具体取决于您的网页结构,此处使用之前的,因为您的触发器是之前的兄弟姐妹,您想要淡化

$('#trigger1, #trigger2, #trigger3').mouseover(function () {
    var roll = $(this).prev('.translatebuttons');
    console.log(roll);
    roll.fadeOut({
        duration:300,
       // fail: that.hide()
    });
});

答案 4 :(得分:-1)

$('div[id=buttonbg]').each(function() {
    $(this).find('#trigger').mouseenter(function(){
        $(this).find('#roll').fadeOut('slow');
    });
    $(this).find('#trigger').mouseleave(function(){
        $(this).find('#roll').fadeIn('slow');
    });
});