2013-03-28 15 views
5

Dies funktioniert nicht:jQuery nach Rückruf einfügen?

$block.insertAfter(form); 

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

aber dies tut:

$block.insertAfter(form); 

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

datetime() ist ein Plugin, das ich mit mit Klasse date zu einem Eingangselement bin Befestigung. Offensichtlich funktioniert # 1 nicht, da dieses Element im DOM immer noch nicht verfügbar ist und 1 Sekunde warten. Aber es ist hacky. Wie kann ich jQuery so erweitern, dass ein Rückruf für die Methode insertAfter() oder auf andere Weise akzeptiert wird?

+0

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

+0

Und was, wenn Sie zuerst .datetime() und dann insertAfter() aufrufen? Ich meine, erstellen Sie die vom DOM losgelöste Form, rufen Sie datetime darauf auf und fügen Sie sie in DOM ein. –

+3

Wie funktioniert # 1 nicht? Es sollte im DOM verfügbar sein, sobald es eingefügt wird. 'insertAfter' ist synchron, sobald Sie' $ block' nach dem 'form' einfügen, ist es verfügbar. Und das Ausführen der '.datetime'-Methode sollte ausreichen. 1 Sekunde (oder jederzeit) zu warten, sollte keine Rolle spielen. Fehle ich etwas? Was ist, wenn Sie '$ block.insertAfter (form) .find ('. Date'). Datetime ({});'? Was ist 'Form'? Ich frage mich, ob es sich um einen Verweis auf ein dynamisch erzeugtes jQuery-Objekt ('$ (" ")) oder einen Verweis auf ein DOM-Element (' $ ("form.class1") ') handelt. – Ian

Antwort

2

Wickeln Sie den Code in das Dokument-ready Beschwörung:

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

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

Und stellen Sie sicher, dass dies der Fall ist nach der Datetime-Bibliothek geladen wird. Das heißt, dieses <script> Etikett sollte nach dem <script src="datetime.js"> sein. Und stellen Sie sicher, dass das Attribut async nicht auf die <script> Tags gesetzt ist.