2013-03-28 9 views
5

これは動作しません:コールバック後のjQuery挿入?

$block.insertAfter(form); 

$('.date', $block).datetime({ 
    userLang: 'en', 
    americanMode: true 
}); 

が、これはありません:

$block.insertAfter(form); 

window.setTimeout(function() { 
    $('.date', $block).datetime({ 
     userLang: 'en', 
     americanMode: true 
    }); 
}, 1000); 

datetime()は、私はクラスdateとして入力要素にアタッチしていますプラグインです。明らかに#1は動作しません。その要素はまだDOMで利用できないため、1秒待ってから動作します。しかしそれはハッキーです。 insertAfter()メソッドまたは別の方法でコールバックを受け入れるようにjQueryを拡張するにはどうすればよいですか?

+0

'.promise'と[' .done'](http://api.jquery.com/deferred.done/) –

+0

最初に.datetime()を呼び出してからinsertAfter()を呼び出すとどうなりますか?私は、DOMから切り離されたフォームを作成し、それにdatetimeを呼び出してDOMに挿入することを意味します。 –

+3

#1はどのように機能しませんか?それは挿入されるとすぐにDOMで利用できるはずです。 'insertAfter'は同期式なので、' form'の後に '$ block'を挿入するとすぐに利用できます。後で '.datetime'メソッドを実行するだけで十分です。 1秒(または任意の時間)待つことは重要ではありません。何か不足していますか? '$ block.insertAfter(form).find( '。date')。datetime({});'? 'フォーム'とは何ですか?私はそれが動的に作成されたjQueryオブジェクト( '$("

")')、またはDOM要素( '$(" form.class1 ")')への参照かどうか疑問に思っています。 – Ian

答えて

2

文書対応呪文でコードをラップ:

$(function() { 
    $block.insertAfter(form); 

    $('.date', $block).datetime({ 
     userLang: 'en', 
     americanMode: true 
    }); 
}); 

そして、これが後の日時のライブラリがロードされて発生することを確認してください。つまり、この<script>タグは<script src="datetime.js">の後にする必要があります。 <script>タグにasync属性が設定されていないことを確認してください。

関連する問題