2017-10-30 17 views
0

私はSmartyブロックテンプレートを使うソフトウェアを使って作業しています。別のテンプレートを 'インクルード'するのは簡単です。SmartyはDOMに追加しないでください

{include file='frontend/folder/file.tpl'} 

しかし、その後、私はそれはDOM、例に追加していないように、完全に無視取得の上のjQueryを使用しようとするもの:

<label id="testonetwothree">test</label> 

、その後のjsファイルで(はいjQueryのが含まれています)

$('#testonetwothree').click(function(e){console.log('test);}); 

あなたはラベルをクリックすると、何も起こらない、それはそれを見つけることができないので、私がチェックしたときにイベントを使用してどこから来たのか、それは、しかし、DOMに追加されていない私に語った:

 $("body").click(function(event) { 
console.log("ID: " + event.target.id); 
} 

「testonetwothree」という要素が明確にクリックされているので、実際に行うことができます。

$("body").click(function(event) { 
if(event.target.id == "testonetwothree"){ 
      console.log('clicked testonetwothree'); 
     } 
}); 

しかし、それはほとんど解決ません、私はちょうど正しくDOMに追加していないですか、Smartyの経験を持っている人は、私は非常に感謝します、助けることができる場合、私は、どこか間違っているつもりのように感じます。 $('body').on('click', '#testonetwothreeevent.target.id == "testonetwothree"の問題について、今

$('body').on('click', '#testonetwothree', function(){ console.log('testity');}); 

:私はコメントで述べたように

+0

同じIDを持つ複数の要素があるかどうかを確認します。たとえば、ブラウザコンソールで '$( '[id =" testonetwothree "]')'を評価します。 IDは一意でなければならず、jQueryのセレクタシステムはこれをパフォーマンスに利用します。 – IMSoP

+0

$( 'body')を使ってみましたか?( 'click'、 '#testonetwothree'、function(){ console.log( 'testity');}); – vicbyte

+0

@IMSoP IDがあまりにもわかりにくいからです。/ – MagicalMidge

答えて

1

は、あなたが.on() 例との結合の動的要素を使用することができます。 これは同等ではなく、最初のものはクリックされたトップレベルの子のみを比較し、後者はイベントをバブルします。 例:

<div id="clickone">ONE<div id="clicktwo">TWO</div></div> 

あなたはonclickの「clickone」を発動しません「clicktwo」をクリックすると、あなたが比較されている方法で、これはあなたのhtmlであると仮定します。今度は.on()でイベントが実行されます。

最後に、あなたは「正しい」方法ではないと感じていると述べたので: これはイベントを添付する完全な方法です。 .click()イベントのjqueryドキュメントをチェックすると、「このメソッドは.on(「クリック」、ハンドラ)のショートカットです。実際、.on()バージョンは動的要素結合:))

https://api.jquery.com/click/

関連する問題