2013-03-28 42 views
5

này không hoạt động:Chèn jQuery sau khi gọi lại?

$block.insertAfter(form); 

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

nhưng điều này không:

$block.insertAfter(form); 

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

datetime() là một plugin mà tôi đang gắn với một yếu tố đầu vào với với lớp date. Rõ ràng # 1 không hoạt động vì phần tử đó vẫn không có sẵn trong DOM, chờ đợi 1 giây hoạt động. Nhưng nó là hacky. Làm thế nào tôi có thể mở rộng jQuery để chấp nhận một cuộc gọi trở lại cho phương pháp insertAfter() hoặc một số cách khác?

+0

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

+0

Và điều gì sẽ xảy ra nếu bạn gọi hàm .datetime() và sau đó insertAfter()? Tôi có nghĩa là tạo ra các hình thức tách ra từ DOM, sau đó gọi datetime trên nó và chèn vào DOM. –

+3

# 1 không hoạt động như thế nào? Nó sẽ có sẵn trong DOM ngay sau khi nó được chèn vào. 'insertAfter' là đồng bộ, vì vậy ngay sau khi bạn chèn' $ block' sau 'form', nó có sẵn. Và chạy phương thức '.datetime' sau đó là đủ. Chờ 1 giây (hoặc bất kỳ lúc nào) không quan trọng. Tui bỏ lỡ điều gì vậy? Nếu bạn sử dụng '$ block.insertAfter (form) .find ('. Date'). Datetime ({});'? 'Form' là gì? Tôi tự hỏi nếu nó là một tham chiếu đến một đối tượng jQuery được tạo động ('$ ("

")'), hoặc tham chiếu đến một phần tử DOM ('$ (" form.class1 ")'). – Ian

Trả lời

2

Quấn mã của bạn trong bùa tài liệu sẵn sàng:

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

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

Và chắc chắn rằng điều này xảy ra sau khi thư viện datetime được tải. Tức là, thẻ <script> này phải sau <script src="datetime.js">. Và đảm bảo rằng thuộc tính async không được đặt trên các thẻ <script>.

Các vấn đề liên quan