2011-12-14 20 views
5

Các phương pháp sau đây:setTimeout (f, 0) tương đương? tại sao nó giải quyết vấn đề qua trình duyệt?

Init: function (selector, settings) 
{ 
    setTimeout(function() 
    { 
     var s = 
     { 
      width: '100%', 
      script_url: '/Content/Scripts/tiny_mce/tiny_mce.js', 
      theme: "advanced", 
      plugins: "autolink,lists,pagebreak,style,layer,table,paste,directionality,noneditable,visualchars,xhtmlxtras,template", 
      theme_advanced_buttons1: "fontselect,fontsizeselect,|,bold,italic,underline,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist", 
      theme_advanced_buttons2: "", 
      theme_advanced_buttons3: "", 
      theme_advanced_buttons4: "", 
      theme_advanced_more_colors: false, 
      theme_advanced_toolbar_location: "top", 
      theme_advanced_toolbar_align: "left", 
      theme_advanced_statusbar_location: "none", 
      theme_advanced_resizing: false, 
      convert_urls: !!$(selector).data("richEditor-ConvertUrls") // by default we don't convert urls 
     }; 
     $.extend(s, settings); 
     $(selector).tinymce(s); 
    },0); 
} 

công trình trên tất cả các trình duyệt, đối với một số lý do, tôi cần gọi setTimeout(f,0) cho firefox, phương pháp này được gọi là trên một ajax tải một phần trên MVC, mà không cuộc gọi này, treo biên tập viên trên firefox và ngắt trang (nhấp vào kết quả công cụ trên trường hợp ngoại lệ thường xuyên hơn không). với cuộc gọi, mọi thứ hoạt động hoàn hảo.

Tôi đã tự hỏi làm thế nào tôi có thể tránh cuộc gọi setTimeout này (thông qua một số cách giải quyết khác), và nếu đó không phải là một lựa chọn tôi muốn biết tại sao.

Tôi sợ điều này có thể không phải là giải pháp sạch nhất cho trường hợp này.

+1

Cuộc gọi lại ajax của bạn có cập nhật trang của bạn với nội dung không? Điều này có thể được kích hoạt trước khi DOM được cập nhật. Nếu đó là trường hợp tôi nghĩ bạn có thể sử dụng sự kiện sẵn sàng của jQuery để đợi DOM hoàn thành trước khi áp dụng tinymce vào '$ (selector)'. – JesseBuesking

+0

nó cập nhật DOM, nhưng điều này cũng thực hiện trong '$ (f() {}); ' – bevacqua

+0

Có lý do nào bạn khai báo' s' bên trong khoảng thời gian chờ và không nằm ngoài phương thức Init (ngoài đăng nó ở đây). Ngoài ra là có một cách bạn có thể tạo lại vấn đề này trong jsfiddle? Điều đó sẽ giúp tôi dễ dàng thử và giúp đỡ hơn. – JesseBuesking

Trả lời

0

Đây chắc chắn là vấn đề về thời gian. Có bất kỳ điều gì khác xảy ra trên DOMContentLoaded, có thể tinyMCE hoặc tập lệnh khác cũng chạy mọi thứ trên sự kiện đó? Hoặc một tập lệnh được tải để thực hiện một document.write()?

Có thể thực hiện chức năng này khi tải khiến cho các vấn đề biến mất. Nếu đó là trường hợp hơn bạn phải tìm ra những gì đang xảy ra tại thời điểm các vấn đề xảy ra, có thể làm một phiên hồ sơ trong Firebug.

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