我是jQuery新手,所以如果我走错了方向,请给我建议。

我有一个函数以“ jQuery对象”作为参数,像这样:

function protectImageFromRightClick(image_object) {
 // yeah ok i know this is only a dumb protection!!

    image_object.bind('contextmenu', function(e) {
        return false;
    });

    image_object.mousedown(function(){
        return false; // for prevent drag
    });
}


我想在选择时调用它。我试着用each()来称呼它:

$( ".photo" ).each(function (i) {
    protect(this);
});


但是this似乎是指没有任何.bind()方法的DOM对象。.我不太清楚如何解决此问题。.有什么想法吗?

面对的是,我在代码的其他地方使用了该功能,所以解决方案如下:

$('some selection').bind()


这不是一个好的解决方案,因为这样我只会写代码重复。

最佳答案

当您使用选择器调用jQuery函数时,它会执行一些任务。首先,它构造jQuery对象。然后,它将jQuery API附加到新构造的对象。然后,它构造一个与选择器匹配的DOM元素数组。

当在jQuery对象上使用each时,或者在回调闭包内部时,this关键字将引用jQuery正在处理的当前DOM元素。

简而言之,

$( ".photo" ).each(function (i) {
    //this == the current element with class="photo"
    //$(this) == a jquery object instanced with an
    //           array of elements containing only the
    //           current element with class="photo" that
    //           each is working with
});

09-25 16:56
查看更多