【问题标题】:JS and JQuery, passing arguments to functionsJS 和 JQuery,将参数传递给函数
【发布时间】:2013-08-08 20:30:08
【问题描述】:

所以我刚开始制作一个网页以进行更改,我想为一些按钮设置动画等等。所以我想做的是编写一个函数,它接受一个对象(在这种情况下是一个)并为悬停事件声明函数。该功能在此(无用)版本中完全正常:

    function hoverOver() {
        $(document).ready(function(){
            $("#FormA").hover(function(){
                $("#ButtonA").animate({marginLeft:"5px", opacity:"1"}, "fast");
            }, function(){
                $("#ButtonA").animate({marginLeft:"0px", opacity:"0.5"}, "fast");
            });
        });

但是为了在多个Button上使用该功能,我想这样写:

    function hoverOver(source) {    
        $(document).ready(function(){
            source.parent().hover(function(){
                source.animate({marginLeft:"5px", opacity:"1"}, "fast");
            }, function(){
                source.animate({marginLeft:"0px", opacity:"0.5"}, "fast");
            });
        });
    }
    // this is how I want to call the function with multiple Buttons
    hoverOver($("#ButtonA"));

我还坚持认为,如果我通过所有这样的函数传递源变量,它会起作用:

    function hoverOver(source) {
        $(document).ready(function(source){ //  <-- here
            source.parent().hover(function(source){ //  <-- here
                source.animate({marginLeft:"5px", opacity:"1"}, "fast");
            }, function(source){ // <-- and here
                source.animate({marginLeft:"0px", opacity:"0.5"}, "fast");
            });
        });
    }
    // this is how I want to call the function with multiple Buttons
    hoverOver($("#ButtonA"));

那么我的问题在哪里?我知道这种 JS 编码方式不是最好的方式,特别是 JS、HTML 和 CSS 有数百万种方法可以做到,但我真的是 4 天前开始的。 ;)

谢谢

【问题讨论】:

    标签: javascript jquery function arguments


    【解决方案1】:

    如果你使用 jQuery,你不妨扩展它的原型,像这样:

    $.fn.hoverOver = function(){
        this.each(function(){
            var $this = $(this);
            $this.parent().hover(function(){
                 $this.animate({marginLeft:"5px", opacity:"1"}, "fast"); 
            }, function(){
                 $this.animate({marginLeft:"0", opacity:"0.5"}, "fast"); 
            });
        });
    }
    

    然后像这样绑定到任意元素上;

    $("#buttonA").hoverOver();
    

    或者这个:

    $(".buttonHover").hoverOver();
    

    【讨论】:

    • 嗯,我明白了。所以你制作了一些你可以使用 fuu.hoverOver() 访问的函数,它需要调用函数的元素并用它来做事,对吧?现在它不起作用,但我会解决我之前遇到的问题。 :) 我会看看我能用它做什么,谢谢。 :)
    • 如果您使用 jQuery,$ 是 jQuery 类对象的快捷方式。 $.fn.hoverOver = function() 正在向这个类添加一个方法。当您调用 $("#buttonA") 时,您会从此选择器创建 jQuery 类的新实例。然后你调用你创建的这个方法。但请记住,您要绑定悬停事件的表单必须是此按钮的直接父级,否则脚本将不起作用。
    • 哈,我成功了。 :) 所以我错过的是添加 $(document).ready() - 行。它现在可以工作了,感谢您的帮助。 :)
    猜你喜欢
    • 2013-01-27
    • 2010-09-27
    • 1970-01-01
    • 2021-08-28
    • 2014-08-16
    • 2011-04-16
    • 2017-02-05
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多