要素が作成された後に関数を呼び出したい。これを行う方法はありますか?
例:
$("#myElement").ready(function() {
// call the function after the element has been loaded here
console.log("I have been loaded!");
});
要素が作成された後に関数を呼び出したい。これを行う方法はありますか?
例:
$("#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 */ });
$.ajax
jQueryまたは$.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'});
要素が作成された後、.live()をチェックしてください。
$('.clickme').live('click', function() {
// Live handler called.
});
そして後で新しい要素を追加します:
$('body').append('<div class="clickme">Another target</div>');
このコードを試すことができます
$('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>
$("<div id=\"elem\"></div>").appendTo("#parent").each(function(){
console.log("I have been created!");
});
古いスレッドですが、私の場合、大きな追加ツリーの状況があり、いわばインラインで初期化を行いたいと考え、次のことを行いました:
$("<div>").append(
...
$("<div>").foo(...).bar(...).etc(...).each(function(){
// init code to run after chain of init functions called
})
...
)
最も簡単なのは、要素を作成した後にコールバックを直接呼び出すことです:)