【问题标题】:Reaching variables in jQuery在 jQuery 中访问变量
【发布时间】:2010-11-30 22:19:35
【问题描述】:

我有这样的代码:

<script type="text/javascript">
    var currentPicture;//default picture
    var picEL;//the image viewer element
    jQuery("#backImageShower").hover(
        function(i)
        {
            picEL = jQuery("#dynloadarxdock > img");
            currentPicture = picEL.attr("src");
            picEl.attr("src","back.jpg");
        },
        function()
        {
            picEl.attr("src",currentPicture);
        }
    );
</script>

但是当我运行这段代码时,它说picEl 没有定义。我认为这可能是因为闭包,但这段代码运行完美:

<script type="text/javascript">
    var currentPicture;//default picture
    jQuery("#backImageShower").hover(
        function(i)
        {
            currentPicture = jQuery("#dynloadarxdock > img").attr("src");
            jQuery("#dynloadarxdock > img").attr("src","back.jpg");
        },
        function()
        {
            jQuery("#dynloadarxdock > img").attr("src",currentPicture);
        }
    );
</script>

但这段代码也包含全局变量并且可以工作。

谁能告诉我为什么?

谢谢。

【问题讨论】:

  • 建议:不要将i 用于非循环变量。事件处理程序的第一个参数通常是一个事件,所以最好叫它e
  • @ThiefMaster:确实。在hover 中,它是一个事件,也没有使用,因此可以完全删除它,就像第二个回调传递给hover 一样。

标签: javascript jquery closures hover


【解决方案1】:

问题在于您正在混合外壳。该变量声明为picEL,但有时用作picEl(小写“l”,这是您的错误所在)。

【讨论】:

    【解决方案2】:

    您使用的是 picEl 而不是 picEL。

     picEl.attr("src",currentPicture);
    

    应该是:

     picEL.attr("src",currentPicture);
    

    【讨论】:

      【解决方案3】:

      除了您拥有的第二个悬停功能 - picEl,您在任何地方都使用 picEL。

      【讨论】:

        猜你喜欢
        • 2013-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-21
        • 2013-06-18
        • 2017-11-21
        • 1970-01-01
        相关资源
        最近更新 更多