【问题标题】:Changing images in loop doesn't work循环更改图像不起作用
【发布时间】:2012-09-26 00:01:07
【问题描述】:

我在这个函数中使用 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>

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

谢谢!!

【问题讨论】:

  • 嗨 Gerardo,您将想要切换您的 idclass 属性 - id 属性被设计为唯一的,而 class 属性不是跨度>
  • 对不起,如果在这种情况下不理解某些内容,您可以告诉我,...不理解我,我会去编辑,但请确保您去论坛并说西班牙语、意大利语和葡萄牙语当然,我喜欢看到你写.....我会说 3 种语言和英语,也没有用,而且在很多事情上肯定有错误.....不仅存在英语......
  • 你不需要 javascript 来改变这样的图像。这应该用 CSS 来完成。
  • 啊,好吧,我必须使用 id unmm 我不考虑这个,我去试试,谢谢你的建议!
  • 是的,我知道,但我想更改图像并在此更改中创建效果,我举了一个简单的例子,在我使用动画功能进行修改以创建过渡之前

标签: jquery mouseover mouseout


【解决方案1】:

使用一些 CSS 使用 :hover 选择器代替 mouseover 和 mouseout

<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

【讨论】:

  • 感谢@ahren,有些时候我的速度比我能应付的快:)
【解决方案2】:

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

 <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>

【讨论】:

  • 抱歉,我使用的是移动设备,无法正确设置格式
  • 将 var 放入循环中?我的函数有你放在这里的这个,我没有工作,我不明白如果循环生成类的所有可能性,为什么没有工作.....
【解决方案3】:

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

$(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 规则来处理您的每个特殊块的充分理由......

【讨论】:

    【解决方案4】:

    试试这个方法,看看是否有效

    $(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);
    });​
    

    【讨论】:

    • 我为第二个函数打错了 $ sing .. 删除它再试一次
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多