2012-03-15 10 views
0

Javascriptを

$.each(['#clk','#clk1'], function() 
    { 
     $(this).click(function() { 
      alert("click") 
     }); 
    }); 

HTML

<a href="#" id="clk">click me</a> 
    <a href="#" id="clk1">click me</a> 

リンクがクリックされません警告ボックス。 更新日:
私は1つ以上のIDを持っています。私は問題を単純化するために1つしか示していない。

答えて

2

Stringオブジェクトの値を取得するには、String.toString()を使用する必要があります。

セレクタの配列が必要な理由はわかりませんが、ここでは2つの解決策があります。

解決策を使用してString.toString();

// Array of strings to be used as element selectors. 
var selectors = ['#element1', '#element2']; 

// Using $.each() 
$.each(selectors, function() { 
    // String.toString() returns the value of the String object. 
    var $this = $(this.toString()); 

    $this.click(function() { 
     console.log('Clicked element(1) =', this.id || this); // DEBUG 
    }); 
}); 

String.join()を使用した代替ソリューション。

// Using String.join() 
$(selectors.join(',')).click(function(event) { 
    event.preventDefault(); // This is to not follow the link 

    // Notice that "this" now referes to the current/clicked element 
    // and not any string value from the "selectors" array. 
    console.log('Clicked element(2) =', this.id || this); // DEBUG 
}); 

demoを参照してください。

セレクタの配列が本当に必要ない場合は、このような単純なmultiple selectorをお勧めします。

$('#element1, #element2').click(function() { ... }); 
+0

+1 'this'は' String'オブジェクトで、通常の文字列ではありませんが、答えに私。 – Davy8

+0

+1。なぜかそれがうまくいかなかった理由を説明してもいいですが、 '.join()'のほうが良い方法です(別の理由で配列が必要であると仮定して)。 – nnnnnn

2

あなたはさらにそれを簡素化することができます。id繰り返し処理を行う場合、なぜあなたはforeach構文を使用している、

まず
$("#clk").click (function() { 
    alert("click"); 
}); 
+0

複数のセレクタにイベントを添付する必要があります。私は問題を簡略化して示しました。 – user1201705

1

?あなたとidを使用しているとき、与えられたidを持つ要素が1つだけ存在するはずです。だから、これは問題ないはずです。

第二
$("#clk").click(function() { 
    alert("click"); 
}); 

、アレイ全体の各反復処理し、あなたの配列は#clkています。ただの文字列、それ以外のものはありません。すべての関数の取得は、2つのパラメータ:0' (the index of the element) and the string#clk`(そのインデックスの値)です。文字列ISはJSオブジェクトに解決されません。

+0

第1に、OPはIDに対して反復していませんが、OPはIDを含む配列を反復しています - 重複はありません。次に、コールバック関数を呼び出すとき、jQueryは 'this'をオブジェクトとしてラップアップされている現在の配列項目の値に設定します(存在しない場合)。そのため、文字列ISはJSオブジェクトに返されます。 [doco](http://api.jquery.com/jquery.each/)を参照してください。 (文字列をセレクタとして再び使用するために文字列を折り返す必要があるため、OPのコードは機能しません) – nnnnnn

0

IMO、問題文を解決するためのクリーンな方法は、次のようになります。

$("a[id^='clk']").click(function() { 
     alert("click"); 
}); 

^=セレクタは、IDが「CLK」で始まるすべてのアンカーを選択し、それらのすべてにクリック機能を結合します。このセレクタの詳細はこちらhere

+0

あなたのID名が後ろに続くことを考えれば、それはかなり良い解決策です。ありがとう。 +1はまだできません。 – user1201705

+0

CSSクラスを使用するほうが適切です。 – Stefan

+0

@Stefan:私は同意すると、ここではCSSクラスを使用する方が適切でしょう。^=は、名前などの属性に特に便利です。 –

関連する問題