2016-08-15 5 views
1

動的にロードされる要素に対してon Click機能を作成する必要があります。この要素のIDは変数$elementです。 IDは文字列で保存されます。私はこのような.onイベントハンドラに渡し:jQuery .onイベントが変数セレクタで動作しない

... .on("click", '"'+$element+'"', function() { ... 

それは(Case 1 JSFiddleを参照)が動作し、エラーUncaught Error: Syntax error, unrecognized expression: "#2"を与えていません。 #2は要素のIDです。

... .on("click", function() {'"'+$element+'"'}, function() { ... 

しかし、( Case 2 JSFiddleを参照)クリッカブル要素に全体のDOMを回すようだ:

は、その後、私はこのような関数でラップしようとしました。なぜ...?

最後に、Case 3 JSFiddleはID #2の要素をクリックすると何かが発生し、ID #3の要素をクリックすると何も起こりません。何も起こりません。私はセレクタが変数として渡されたときに動作するようにはできません。


Case 1 JSFiddleは奇妙なエラーを出します。

Case 2 JSFiddle「a」または「b」をクリックすると「a」が赤色に変わります。

Case 3 JSFiddleは私が後にしているものです。 "a"をクリックすると、赤色に変わり、 "b"をクリックすると何も起こりません。あなたのフィドルから

+1

あなたは ''#2' ''を文字列として出力しますが、これは無効です。さらに、IDは数字で始めるべきではありません。 '$ element'は既に文字列であるので、.on(" click "、$ element、function(){...')を書きます。 – Alex

+0

https://jsfiddle.net/p4ursy9r/5/ – Alex

+0

@Alex https: /www.w3.org/TR/html5/dom.html#the-id-attribute – epascarello

答えて

1

have a look at this

var $element = '#a2'; 

$("#a1").on(
     "click", 
     $element,  // <-- child Selector 
     function() { 
      $("#a1") 
      .find('span') 
      .filter(function() { 
       return $(this).text() === 'a'; 
      }) 
      .css('background-color', 'red'); 
     } 
    ); 

IDが番号、at least in 4 timesで始めるべきではないことに注意してください。

+0

のIDは数字で始めることができます。https://www.w3.org/TR/html5/dom.html#the-id -attribute – epascarello

+0

@epascarello私は何も言いませんでした:)私は答えを更新しました – Alex

+0

私はfacepalmで笑っています。明らかに '$ element'を置くだけで動作します。実際のコードのIDは文字で始まりますが、私は例で単純化しました。私はここにあるようにIDを私の質問に残しておかなければならないと思います。 –

関連する問題