2012-06-08 46 views
9

Tengo un número de campos de entrada en mi formulario, uno de los cuales usa TinyMCE (versión 3.5.2). Una vez que TinyMCE carga, establece el foco en sí mismo. ¿Cómo puedo evitar que esto suceda? Me gustaría mantener la primera entrada seleccionada por defecto.¿Hay alguna forma de evitar que TinyMCE se enfoque automáticamente en la carga de la página?

Esto es lo que mi código es el momento

var tinymce = $('#Content'); 
tinymce.tinymce({ 
    theme: "advanced", 
    plugins: "...", 
    theme_advanced_buttons1: "...", 
    theme_advanced_buttons2: "...", 
    theme_advanced_buttons3: "...", 
    theme_advanced_buttons4: "...", 
    theme_advanced_toolbar_location: "top", 
    theme_advanced_toolbar_align: "left", 
    theme_advanced_statusbar_location: "bottom", 
    theme_advanced_resizing: true, 
    content_css: [...], 
    template_external_list_url: "lists/template_list.js", 
    external_link_list_url: "lists/link_list.js", 
    external_image_list_url: "lists/image_list.js", 
    media_external_list_url: "lists/media_list.js", 
    template_replace_values: { 
     username: "Some User", 
     staffid: "991234" 
    } 
}); 

Actualización:

Después de algunas pruebas más parece que este problema es sólo en IE9. Chrome, FireFox, Opera & Safari no establece el foco en el editor al cargar la página. IE9 en el modo IE7 e IE8 no establece el foco en la carga de la página, pero IE9 mismo establecerá el foco en el editor incluso cuando intente establecer el foco en otra entrada.

Sin embargo, todo esto cambia cuando carga la página con un valor en el área de texto. Cuando lo haces, IE9 funciona como los otros navegadores. Por ahora estoy cargando la página con un solo espacio en el área de texto y eso hace que IE9 funcione correctamente.

+2

¿Está utilizando una versión anterior de TinyMCE? – MrCode

+0

Estoy usando la versión 3.5.2 –

Respuesta

1

ayudaría a tener el resto de sus entradas y estructura de forma de conocer el mejor enfoque, pero algo a lo largo de estas líneas debería ayudar:

jQuery

function myCustomOnInit() { 
    $('form *:input[type!=hidden]:first').focus(); 
} 

tinyMCE.init({ 
     ... 
     oninit : myCustomOnInit 
}); 

Desde el Documentation:

Esta opción le permite especificar una función para ser ejecutada cuando todas las instancias del editor hayan terminado su inicialización. Esto es muy parecido al evento de carga de una página HTML.

Nota: También puede pasar el nombre de la función como una cadena. Pero en este caso, la función debe declararse en el alcance global de la página.

El truco aquí es para ajustar el enfoque para la primera entrada visibles:

$('form *:input[type!=hidden]:first').focus(); 

Ver este working example!


editado

Me llevó bastante tiempo para probar esto y conseguir que funcione para IE9, pero aquí está:

ver este Working Solution!

jQuery

setup : function(ed) { 
    ed.onLoadContent.add(function(ed, o) { 
    var controlLoad = setTimeout(function() { 
     if ($('.mceIframeContainer').size()==1) { 
     $('form *:input[type!=hidden]:first').focus(); 
     clearTimeout(controlLoad); 
     } 
    }, 100); 
    }); 
} 

Lo que esto hace es ejecutar un tiempo de espera hasta que la clase .mceIframeContainer se encuentra, lo que significa que la carga se realiza. Después de encontrarlo, establece el foco para el primer elemento de entrada y se borra el tiempo de espera.

+0

Editado para agregar un [ejemplo de trabajo] (http://dl.dropbox.com/u/76169930/stackoverflow/question/10944450/tinymce/examples/index.html) para esta solución , incluso sin el 'oninit' del complemento' tinyMCE'. – Zuul

+0

Esto funciona, pero no para IE9. He actualizado mi pregunta con algunos hallazgos nuevos. –

+0

@BrianSurowiec, me llevó bastante tiempo lidiar con el problema de IE9, ¡pero solo edité la respuesta con una solución que funcionaba y probaba para usted! – Zuul

-1
setup: function(ed){ 
    ed.on('postRender', function (editor, cm) { editor.preventDefault(); }); 
} 

si ejecuta un solo comando dentro de la función ignora el preventDefault y sigue enfocando y desplazándose !!!! : D

Cuestiones relacionadas