2016-05-03 5 views
0

idの値が4つの配列にあります。各配列には、まだ入れていないh1とpのテキスト値が割り当てられます。今は、配列graphicDesign内の画像の1つがクリックされた場合に警告するようにしようとしています。私はあなたがtypeofを使用することができます$ .inArray

DEMO

var graphicDesign = [$('#design'), $('#DD'), $('#SElogo')]; 
var webDesign = [$('#bootstrap'), $('#farm'), $('#pong'), $('#SE'), $('#dung')]; 
var programming = [$('#SE'), $('#dung'), $('#sacar')]; 
var other = [$('#firm')]; 

function categories() { 
    if ($.inArray(this, graphicDesign) > -1) { 
    alert('hello'); 
    } 
} 
+0

ご質問はありますか? – Qianyue

+0

あなたのデモコードでは、 'this'はそれを別々に呼び出しているので要素にはなりません。 console.log(this) 'を' categories() 'に追加し、コンソールを開きます(F12を押します)。あなたは私が何を意味するか見るでしょう。 –

+0

アラートを取得する方法。私のギャラリーの各画像はIDを持っていますが、クリックされた画像のIDが特定のことをするよりもx配列であれば、各IDは私の配列の1つにあります。今すぐアラート – Shniper

答えて

5

DOMオブジェクトを配列に格納して、$ .inArrayと一致させないでください。 IDや別の属性を使用する方が良い解決策です。例えば

https://jsfiddle.net/1f9xd3t0/

var graphicDesign = ['design', 'DD', 'SElogo']; 

function categories(id) { 
    if ($.inArray(id, graphicDesign) > -1) { 
    alert('hello'); 
    } 
} 

categories('design'); 
+0

これは正しい解決策です。 –

0

を使用してみましたが、ここでの例です。

// Objects 
typeof {a:1} === 'object'; 

// use Array.isArray or Object.prototype.toString.call 
// to differentiate regular objects from arrays 
typeof [1, 2, 4] === 'object'; 
0

Array.indexOfは()と同じことをしてネイティブ関数です。

graphicDesign.indexOf(this) > -1は、あなたが書いたものと同等です。

thisは、この関数をオブジェクトに代入してメソッドとして呼び出さない限り、グローバルオブジェクトを参照しています...しかし、次にあなたがオブジェクトであるかどうかを調べようとしていますそれを呼び出すのはgraphicDesign配列の中にありますか?ここで

がアラートを解雇でしょう使い方の例です:

var graphicDesign = [ {} ] 

graphicDesign[0].categories = function() { 
    if (graphicDesign.indexOf(this) > -1) { 
    alert('the object this method was called on is inside the graphicDesign array') 
    } 
} 

graphicDesign[0].categories() 

それはあなたが達成しようとしているまさに不明確だなど、しかし(あなたは、クリック検出に言及したが、何のクリックハンドラは、ここではありません)... ...私はこれが助けてくれるといいのですか?

1

eventオブジェクトをcategories()に渡す必要があります。

$('.portPic').click(function(e) { 
    // ... 
    categories(e); 
}); 

function categories(e) { 
    console.log(e.target); 
    if ($.inArray(e.target, graphicDesign) > -1) { 
    alert('hello'); 
    } 
} 

そしておそらくあなたの配列にid年代ではなく、jQueryのオブジェクトを使用してUPDATE。

var graphicDesign = ['design', 'DD', 'SElogo']; 

次にcategories()e.target.idを使用しています。

0

$ .inArrayのこのブロックはうまくいきますが、間違った場所に置くと、常に-1が返され、警告( 'hello')を受け取れません。全体のロジックを修正してください。

if ($.inArray(this, graphicDesign) > -1) { 
    alert('hello'); } 
関連する問題