1

私は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を持たないDOMオブジェクトを参照しているよう.bind()です。これを解決する方法がよくわかりません。何かアイデアはありますか?

顔は私がコードのどこかでその関数を使用しているということですので、次のような解決策があります:

$('some selection').bind()

このように私はコードの繰り返しだけを書くので、これは良い解決策ではありません。

4

5 に答える 5

6

JQueryでは、キーワード$(this)の代わりに使用する必要があります。this

于 2013-02-17T23:52:35.720 に答える
2

セレクターを使用してjQuery関数を呼び出すと、いくつかのタスクが実行されます。まず、jQueryオブジェクトを作成します。次に、jQueryAPIを新しく構築されたオブジェクトにアタッチします。次に、セレクターに一致する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
});
于 2013-02-17T23:59:08.040 に答える
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はjQueryではなく純粋なjsになっているため、次を使用できます。

$( ".photo" ).each(function (k,v) {
    protect($(v));
});

kがここにあるのか疑問に思うなら、kはキーを表し、vは値を表します。配列では、これは単純かもしれません。kは0、1、2、...ですが、これは次のようなオブジェクトでも機能します。{"k1":"v1","k2":"v2"}

于 2013-02-17T23:56:14.597 に答える
0

関数内のjQueryオブジェクトをいつでもチェックし、必要に応じてキャストできます。

if (!image_object instanceof $) {
    image_object = $(image_object);
}
于 2013-02-17T23:55:33.007 に答える
0

.eachメソッドは実際のDOMオブジェクトに設定され、そのthisDOMオブジェクトを別のオブジェクトでラップすることでjQueryオブジェクトに変えることができます$()

$(".photo").each(function () {
    protect($(this));
});
于 2013-02-17T23:57:22.923 に答える