我是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()
不是一个好的解决方案,因为这样我只会写代码重复..
答案 0 :(得分:6)
使用JQuery,您必须使用$(this)
而不是this
关键字。
答案 1 :(得分:2)
使用选择器调用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
});
答案 2 :(得分:1)
如果你用每个迭代,那么每次迭代,都会调用回调, 参数(i)是你的元素。
喜欢
的java:
Vector<Integer> photo = new Vector<>();
photo.add(2); //ok very constructed..
for(int v:photo){
// here v is your iteration variable
}
JS:
$( ".photo" ).each(function (k,v) {
protect(v);
});
然而,v现在是纯js,而不是jQuery, 所以你可以使用:
$( ".photo" ).each(function (k,v) {
protect($(v));
});
如果你想知道k在这里是什么:k代表键,v代表值。
在数组中,这可能很简单,k是0,1,2,...
但这也适用于像{"k1":"v1","k2":"v2"}
答案 3 :(得分:0)
您可以随时检查函数中的jQuery对象,并在必要时进行转换,例如
if (!image_object instanceof $) {
image_object = $(image_object);
}
答案 4 :(得分:0)
.each
方法将this
设置为实际的DOM对象,您可以通过用另一个$()
$(".photo").each(function () {
protect($(this));
});