2016-04-18 19 views
0

私は流星1.3を使用しています。流星のアプリケーションに「Webテンプレート」を統合する必要がありました。この「Webテンプレート」にはcustom.jsファイルがあります。 "web template"を統合した後、jsファイル内のこれらのイベントは一度だけ実行されます。これを修正する方法があります。このjsファイルには多くの行が含まれています。 ありがとうjqueryイベントの流星は一度だけ実行されます

答えて

1

イベントはテンプレート内のDOM要素に直接バインドされ、流星がDOM要素を変更するとバインディングが失われるという問題があります。

代理イベントは、jquery .on()を使用して行います。

あなたがしなければならないことは、固定されたDOM要素、つまりHTMLを変更する親のイベントを処理することです。この要素の内部でイベントが発生すると、イベントはそれを処理する固定されたDOM要素に「バブル」します。このイベントは、それを起動したDOM要素に関する情報を持ちます。したがって、onサブスクリプションは正しいハンドラを呼び出すことができます。

なお$('#fixedElement').on(event, selector, handler)指定:

  • 「キャッチ」バブリングイベントが
  • したいイベントが固定された要素の子孫要素をフィルタリング
  • セレクタを処理するだろう固定要素
  • ので

を実行するためのハンドラは、どのイベントを指定することができますどのハンドラでどの要素を扱うか。そして、流星がDOMを修正した後で、これはイベントを処理します。

あなたはこの持っている場合たとえば、:ありIDが '#btnOk' が

$('#container').on('click', '#btnOk', function() { alert('Clicked OK!`); }); 

ように、いつでもDOM要素:

$('#btnOk').click(function() { alert('Clicked OK!`); }); 

をあなたがこの中にそれを変更する必要があります'#cotnainer'の内部では、手作業の前に存在するオブジェクトやその場で作成されたオブジェクトにかかわらず、ハンドラは実行されます。

もちろん、#container要素が存在し、他の要素に置き換えられていないことを確認する必要があります。これを行うには、たとえば、jQuery .parent()を使用してDOMツリーを走査する必要があります。

+0

ハンクス、私は試しましたが、動作しません。 $(myElementId).on( 'click'、function(){//何かする}}; – nemrrached

+0

2番目のパラメータを指定する必要があります。更新された回答をご覧ください。 – JotaBe

+0

Thnaks、その働き – nemrrached

関連する問題