在循环中更改图像并不起作用

时间:2012-09-26 00:01:08

标签: jquery mouseover mouseout

我使用for循环在这一个函数中通过jQuery显示所有元素:

<script> 
$(function() {
    var number_menus = 9;
    for (i = 1; i <= number_menus; i++) {
        var p1 = +i;
        $(".wm_" + i).show()
            .css("background-image", "url(imagenes/footer/m/" + i + ".png)");

        $(".wm_" + i).mouseover(function() {
            $(this).css(
                "background-image", 
                "url(imagenes/footer/m/" + i + "_down.png)"
            );
            alert("this_down.png");
        });

        $(".wm_" + i).mouseout(function() {
            $(this).css(
                "background-image", 
                "url(imagenes/footer/m/" + i + ".png)"
            );
        });
    }
});​
</script>

另一方面我有这个代码用于显示所有元素或图像加载并创建鼠标悬停效果:

<div id="web_footer_publi">
  <div id="web_footer_marks" class="wm_1"></div> 
  <div id="web_footer_marks" class="wm_2"></div> 
  <div id="web_footer_marks" class="wm_3"></div> 
  <div id="web_footer_marks" class="wm_4"></div>
  <div id="web_footer_marks" class="wm_5"></div> 
  <div id="web_footer_marks" class="wm_6"></div> 
  <div id="web_footer_marks" class="wm_7"></div> 
  <div id="web_footer_marks" class="wm_8"></div>
  <div id="web_footer_marks" class="wm_9"></div>
</div>

当创建函数时,在循环中思考所有类的所有可能性,但是当我查看图像时,这显示了循环的其他图像并且工作不好,我想,请告诉我这个代码中的工作代码有什么不好用它

谢谢!!

4 个答案:

答案 0 :(得分:3)

而不是使用鼠标悬停和mouseout使用:hover选择器

使用一些CSS
<style>
.wm_1 {
  background-image: url(imagenes/footer/m/1.png);
}
.wm_1:hover {
  background-image: url(imagenes/footer/m/1_down.png);
}
</style>

不需要JS

为其余节点重复此CSS-2,3,4 ... 9

答案 1 :(得分:1)

我认为这是因为背景造成的。在循环内创建一个闭包,以便代码立即执行。应该有其他方法来解决这个问题。

 <script> 
    $(function() {
        var number_menus = 9;
        for (i = 1; i <= number_menus; i++) {

    (function(i){

            var p1 = +i;
            $(".wm_" + i).show().css("background-image", "url(imagenes/footer/m/" + i + ".png)").mouseover(function() {
                $(this).css("background-image", "url(imagenes/footer/m/" + i + "_down.png)");
                alert("this_down.png");
            }).mouseout(function() {
                $(this).css("background-image", "url(imagenes/footer/m/" + i + ".png)");
            });

    })(i);

        }
    });​
</script>

答案 2 :(得分:0)

尝试这种方法,看看它是否有效

$(function() {
    var number_menus = 9;
    (function() { for (i = 1; i <= number_menus; i++) {
        var p1 = +i;
        $(".wm_" + i).show().css("background-image", "url(imagenes/footer/m/" + i + ".png)");
        $(".wm_" + i).mouseover(function() {
            $(this).css("background-image", "url(imagenes/footer/m/" + i + "_down.png)");
            alert("this_down.png");
        });
        $(".wm_" + i).mouseout(function() {
            $(this).css("background-image", "url(imagenes/footer/m/" + i + ".png)");
        });
    } })(i);
});​

答案 3 :(得分:0)

通常,您可以在所有元素上使用公共类,您可以使用它们来集体定位所有元素;例如,在您的情况下,它可能是class='wm'。 class属性不必是唯一的(而id确实如此),因此这是一个合理的类。然而,即使它们只是相似,你也不需要for循环 - 只需使用attribute-starts-with selector,它就可以用来同时定位它们。对于索引,属性setter都有一个方法签名,它接受一个可以将索引作为参数提供的函数。

$(document).ready(function() {
    var $specialDivs = $("div[class^='wm'");

    $specialDivs
        .show()
        .css("background-image", function (i) {
            return "url(imagenes/footer/m/" + i + ".png)";
        });
        .mouseenter(function() {
            $(this).css("background-image", function (i) {
                return "url(imagenes/footer/m/" + i + "_down.png)";
            });
            alert("this_down.png");
        });
        .mouseleave(function() {
            $(this).css("background-image", function (i) {
                return "url(imagenes/footer/m/" + i + ".png)";
            });
        });
});

然而,所有这些只有在实际上具有某些特定的内容 (参见更正)与这些节点相反时才有用对悬停的简单css效果;那些应该用简单的CSS来完成:

div[class^='wm']:hover {
    background-image: ...;
}

- 作为对上述内容的更正,我认为每个人都有不同的背景图像,这是使用JS而不是添加n css规则来处理每个特殊块的充分理由。 ..