jQuery - 将函数绑定到没有事件的选择器?

时间:2011-12-12 02:27:02

标签: jquery

我正在学习如何定义一个函数并稍后再调用它。 我试图在我的函数中定义'this'而不使用事件。

function slide() {
    var imgAlt = $(this).find('img').attr("alt"); 
    var imgTitle = $(this).find('a').attr("href"); 
    var imgDesc = $(this).find('.block').html();  
    var imgDescHeight = $(".main_image").find('.block').height(); 

    $(.active); 
    $(".main_image .block").animate({ opacity: 0, marginBottom: -imgDescHeight }, 250 ,
                function() { 
                    $(".main_image .block").html(imgDesc).animate({ opacity: 0.85,  marginBottom: "0" }, 250 ); 
                    $(".main_image img").attr({ src: imgTitle , alt: imgAlt}); 
                }
            );
     }
   });

在第6行,你会看到'$(。active); '这是我想要选择活动类的地方,然后将以下函数应用于它。通常情况下我习惯用点击或其他东西来设置它,所以我不确定如何实现它。

任何帮助非常感谢!感谢

这是一个js小提琴,你可以看到大局: http://jsfiddle.net/wzQj6/21/

3 个答案:

答案 0 :(得分:1)

请参阅下面的代码中的第3-4行,了解如何缓存.active元素以供重用(然后使用它而不是this!):

function slide() {

    //cache all .active elements for reuse
    var actives = $(".active");

    //use the new 'actives' variable instead of 'this'
    var imgAlt = actives.find('img').attr("alt"); 
    var imgTitle = actives.find('a').attr("href"); 
    var imgDesc = actives.find('.block').html();  
    var imgDescHeight = $(".main_image").find('.block').height(); 

    //$(.active); -- not sure what you were doing with this :p
    $(".main_image .block").animate({ opacity: 0, marginBottom: -imgDescHeight }, 250 ,
                function() { 
                    $(".main_image .block").html(imgDesc).animate({ opacity: 0.85,  marginBottom: "0" }, 250 ); 
                    $(".main_image img").attr({ src: imgTitle , alt: imgAlt}); 
                }
            );
     }
   });

干杯!

答案 1 :(得分:0)

当你调用一个函数时,其作用域内的this(也称为上下文)通常是拥有并调用所述函数的对象。 (即foo.bar()bar()this == foocall

在Javascript中,如果要调用函数并指定函数上下文是什么,可以使用bar.call(foo); // inside bar, this == foo, even if foo wasn't the owner / caller of the function 方法,如下所示:

// take note, also, that your syntax for selecting .active is incorrect.
// you should be passing in a string.
var active_elements = $('.active');
some_function.call(active_elements);

您还没有发布您实际想要调用的函数的代码,所以我无法评论这是否是(最)正确的方法,但据我所知,这对你有用。

{{1}}

答案 2 :(得分:0)

据我了解你的问题,你正在寻找一种方法来调用一个范围,即javascript上下文,你分开准备的函数(jQuery方法)。如果是这样,这是我的代码示例和解释。

var el = $('.active');
$.fn.animate.call(el, options, timeout, function() { 
  var active = this;
  // do whatever you need
});
  1. jQuery animate函数在jQuery.prototype命名空间中定义,该命名空间也是jQuery.fn。
  2. 在侧面上下文中调用函数有两种方法。它们是applycall。您可以查看它们之间的区别here
  3. 我希望我帮助过你。