首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jQuery中在链式事件处理程序之间传递局部变量

在jQuery中在链式事件处理程序之间传递局部变量
EN

Stack Overflow用户
提问于 2015-07-19 19:49:09
回答 2查看 585关注 0票数 2

我正在构建一个简单的jQuery脚本,它将在我的网站上替换一个<img>元素的源图像。我想知道是否有可能将局部变量从一个事件处理程序(对于mouseenter)传递给mouseleave事件的下一个链式处理程序。这是我的密码:

代码语言:javascript
复制
            $("#homepage-media-slider li > img").on('mouseenter', function() {
                var ele = $(this);
                var eleSrc = $(this).attr('src');
                var overleafImage = $(this).attr('data-overleaf');
                ele.attr('src', overleafImage);
                ele.attr('data-overleaf', eleSrc);
            }).on('mouseleave', function() {
               ....
            });

我希望能够在ele事件处理程序的事件处理程序中使用eleSrcoverleafImage,以避免我不得不在这个处理程序中再次编写相同的代码。有可能吗?如果有,怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-19 19:53:37

首先,局部变量是在函数中定义的函数的局部变量,因此事件处理程序函数中的变量不可用于在该函数之外定义的另一个事件处理程序函数。

您可以通过将两个事件处理程序组合成一个事件处理函数来保存重复代码,在该函数中,您使用公共设置,然后根据该事件进行分支。

下面是一个代码示例:

代码语言:javascript
复制
        // set up a single event handler for multiple events
        $("#homepage-media-slider li > img").on('mouseenter mouseleave', function(e) {
            // common code setup here
            var ele = $(this);
            var eleSrc = $(this).attr('src');

            // branch based on the event that occurred here
            if (e.type === "mouseenter") {
                // mouseenter code here
                var overleafImage = $(this).attr('data-overleaf');
                ele.attr('src', overleafImage);
                ele.attr('data-overleaf', eleSrc);
            } else {
                // mouse leave code here
            }
        });

注意,这比将变量移到更高的范围并尝试共享它们要好得多,因为在这里,每个事件的发生都正确地初始化了它们,如果您的事件处理程序服务于多个对象,或者如果事件以不寻常的顺序到达,它们甚至可以很好地工作。

票数 9
EN

Stack Overflow用户

发布于 2015-07-19 20:07:36

按照@jfriend00的思路,答案可以利用hover()来触发这两个事件,并将2个处理程序组合成一个

代码语言:javascript
复制
$("#homepage-media-slider li > img").hover(function (e) {
    // which way are we going ?
    var isEnter = e.type === "mouseenter",
        ele = $(this),
        eleSrc = $(this).attr('src'),
        overleafImage = $(this).attr('data-overleaf');
    if (isEnter) {
        //mouseenter code
        ele.attr('src', overleafImage);
        ele.attr('data-overleaf', eleSrc);
    } else {
        // mouseleave code here
    }

});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31505260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档