2011-12-14 21 views
5

El siguiente método:setTimeout (f, 0) equivalente? ¿Por qué soluciona problemas entre navegadores?

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); 
} 

obras en todos los navegadores, por alguna razón, necesito la llamada setTimeout(f,0) para Firefox, este método se llama en una carga parcial Ajax el MVC, sin esta llamada, se bloquea el editor en Firefox y los saltos de página (haciendo clic en los resultados de las cosas en las excepciones más de las veces). con la llamada, todo funciona a la perfección.

Me preguntaba cómo podría evitar esta llamada a setTimeout (a través de alguna otra solución), y si esa no fuera una opción, me gustaría saber por qué.

Tengo miedo de que esta no sea la solución más limpia para este caso.

+1

¿Su devolución de llamada ajax actualiza su página con los contenidos? Esto podría estar disparando antes de que el DOM se haya actualizado. Si ese es el caso, creo que podrías usar el evento jQuerys listo para esperar a que el DOM termine antes de aplicar tinymce al '$ (selector)'. – JesseBuesking

+0

actualiza el DOM, pero esto también se ejecuta dentro de '$ (f() {});' – bevacqua

+0

¿Hay alguna razón por la que declare 's' dentro del tiempo de espera y no fuera del método Init (aparte de publicarlo aquí). ¿También hay alguna forma de que puedas recrear este problema en jsfiddle? Eso me haría más fácil tratar de ayudar. – JesseBuesking

Respuesta

0

Esto tiene que ser un problema de tiempo. ¿Ocurre algo más en DOMContentLoaded, quizás tinyMCE u otra secuencia de comandos también ejecuta cosas en ese evento? O se carga una secuencia de comandos que ejecuta un document.write()?

Probablemente la ejecución de esta función en carga hace que los problemas desaparezcan. Si ese es el caso, entonces tienes que averiguar qué está pasando en el momento en que ocurren los problemas, tal vez hacer una sesión de perfil en Firebug.