2016-11-01 20 views
0

in jQuery;特定の関数が実行されたら、どのように関数を実行しますか?例えば;毎回.text()が実行されますが、コンテキストに関係なく機能を実行できますか?デフォルトのjQuery関数が実行された後にJavascript関数を実行します。

この特定の例では、.append()を聞きたいので、新しい要素が画面に配置されたときにイベントリスナーを再登録する必要があります。 (btnクリックイベントリスナー)。

どうすればこの問題を解決できますか?関数の例としてrefreshEvents()を使用しましょう。

+2

イベント委譲を使いやすくしないでください。 – adeneo

+1

あなたは、$ .fn.append()の古い値を呼び出して、あなたが望むことをするには '$ .fn.append()'を再定義する必要があります。イベントの委任を使用してあなたが望むことができないことは確かですか? – Barmar

+0

こんにちは@adeneo、私のコメントをBarmarの答えで見つけてください。 –

答えて

2

Event binding on dynamically created elements?に記載されているように、イベントの委任を使用することが適切な方法です。例えば。

$("#container").on("click", ".search-btn", function() { 
    ... 
}); 

すべて動的に追加し、検索ボタンを含む静的要素のセレクタと#containerを交換:

$(".search-btn").on("click", function() { 
    ... 
}); 

に変更。あなたが行うことができます

しかし、あなたが求めて何をする方法を示すために、:

(function(oldappend) { 
    $.fn.append = function() { 
     var result = oldappend.apply(this, arguments); 
     refreshEvents(); 
     return result; 
    }; 
})($.fn.append); 

これは、ローカル変数oldappendでのjQuery .append()方法の元の値を保存し、その後、呼び出す関数にそれを再定義独自の関数を呼び出し、関数を呼び出します。

+0

こんにちは、Barmar、イベントノートをありがとう。私は現在、イベントを持っています。しかし、彼らはdocument.ready()上で実行されているので動作していませんし、新しい要素が生成されると、イベントは新しいボタンでは機能しなくなります。 $( "。search-btn")on( 'click'、function(){ alert( "test"); }); 新しい検索-btnがあると、その機能を再実行しなければ機能しません。 –

+0

そのため、リンクされた質問で説明されているように、イベント委任を使用する必要があります。 – Barmar

+0

$( 'body')。on( 'click'、 '。search-btn'、fn) –

関連する問題