jqueryで要素が作成された後、関数を呼び出すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/6386128

  •  29-10-2019
  •  | 
  •  

質問

要素が作成された後、関数を呼び出したいです。これを行う方法はありますか?

例:

$("#myElement").ready(function() {
    // call the function after the element has been loaded here
    console.log("I have been loaded!");
});
役に立ちましたか?

解決

どのように要素を作成していますか?

静的HTMLで作成している場合は、使用するだけです .ready(handler) また .on("load", handler). 。 Ajaxを使用している場合、それは魚の別のやかんです。

jqueryを使用している場合 load() 関数コンテンツがロードされたときに実行できるコールバックがあります。

$('#element').load('sompage.html', function(){ /* callback */ });

jqueryを使用している場合 $.ajax また $.get/$.post 関数その後、その中に成功コールバックがあります:

$.ajax({
  url: 'somepage.html',
  success: function(){
    //callback
  }
});

要素を作成してこのように追加する場合は、次のようになります。

$('body').append('<div></div>');

その後、代わりにこれを行うことができます:

$('<div />', { id: 'mydiv' }).appendTo('body').ready(function(){ /* callback */ });

しかし、これは重要ではありません - それは同期しているためです(つまり、次のコード行はとにかくDOMに要素を追加するまで実行されないことを意味します... - あなたが画像をロードしない限り)。 :

$('<div />', { id: 'mydiv' }).appendTo('body');
$('#mydiv').css({backgroundColor:'red'});

しかし、同時に、あなたはこれを行うことができると言っています:

$('<div />', {id:'mydiv'}).appendTo('body').css({backgroundColor:'red'});

他のヒント

jqueryを調べたいと思うかもしれません 住む イベント。イベントハンドラーを、DOMで追加または追加の要素が作成された後に一致するセレクターに添付します。

あなたが持っているなら <ul> そして、あなたは動的に新しいものを作成します <li> あなたのアイテム $(document).ready() セレクターをイベントハンドラーに配線して、 <li> そのイベントの要素は配線されます。

これが次のとおりです jsfiddle デモのサンプル live.

お役に立てれば。

このコードを試すことができます

$('body').on('click', '#btn', function() {
  $($('<div>').text('NewDive').appendTo("#old")).fadeOut(0).fadeIn(1000);
})
#old > div{
  width: 100px;
  background: red;
  color: white;
  height: 20px;
  font: 12px;
  padding-left: 4px;
  line-height: 20px;
  margin: 3px;
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test</title>
    <link rel="stylesheet" href="./index.css">
  </head>
  <body>
    <div>
      <!-- Button trigger modal -->
      <button type="button" id="btn">Create Div</button>
      <div id="old">

      </div>
    </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  </body>
</html>

これは、別のJSライブラリまたは直接コントロール外のイベントによって、独自のスクリプトの外側に作成/ロードされたDOM要素に必要な場合があります。

このようなシナリオでは、ターゲット要素が存在するかどうか、これが真であるかどうかを定期的にチェックする間隔を常に設定します。間隔は削除され、コールバック関数を実行します。

このために、私は再利用する事前定義された関数を持っています:

function runAfterElementExists(jquery_selector,callback){
    var checker = window.setInterval(function() {
     //if one or more elements have been yielded by jquery
     //using this selector
     if ($(jquery_selector).length) {

        //stop checking for the existence of this element
        clearInterval(checker);

        //call the passed in function via the parameter above
        callback();
        }}, 200); //I usually check 5 times per second
}

//this is an example place in your code where you would like to
//start checking whether the target element exists
//I have used a class below, but you can use any jQuery selector
runAfterElementExists(".targetElementClass", function() {
    //any code here will run after the element is found to exist
    //and the interval has been deleted
    });

.live()は、要素が作成された後に最高のものをチェックしてください、、、

$('.clickme').live('click', function() {
      // Live handler called.
});

その後、新しい要素を追加します。

$('body').append('<div class="clickme">Another target</div>');
$("<div id=\"elem\"></div>").appendTo("#parent").each(function(){

   console.log("I have been created!");

});

使用できます setinterval 要素の存在を確認する機能:

var CONTROL_INTERVAL = setInterval(function(){
    // Check if element exist
    if($('#some-element').length > 0){
        // ...
        // Since element is created, no need to check anymore
        clearInterval(CONTROL_INTERVAL);
    }
}, 100); // check for every 100ms

最も簡単なのは、要素を作成した後、コールバックを直接呼び出すことです:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top