2010-02-06 20 views
21

Estoy usando TinyMCE para un área de texto en una página, pero no juega bien en el orden de tabulación de los otros elementos.¿Cómo se establece el foco de un elemento textarea TinyMCE?

que puede utilizar el siguiente código para capturar cuando salta fuera del primer elemento:

$('#title').live('keypress', function (e) { 
    if(e.keyCode == 9) { 
     alert('tabbed out'); 
    } 
}); 

¿Cómo puedo ajustar el foco a un editor TinyMCE?

Respuesta

40

encontrado por fin una respuesta ... utilizar el comando:

tinymce.execCommand('mceFocus',false,'id_of_textarea'); 

Para mis propósitos, 'id_of_texterea' era "descripción", es decir,

<textarea id="description" ... ></textarea> 

En el elemento de formulario que precedió a mi área de texto, agregué el execCommand anterior al eleme la acción "onblur" de nt.

+0

para un enfoque más realista, puede vincular ese comando exec con una tecla de tabulación en el elemento de formulario anterior. – jbnunn

+0

gracias por esta guía! Estoy teniendo problemas con esto! –

2

Este enfoque debería pasar al área de texto TinyMCE:

$("#id_of_tinyMCE_area").focus(); 
+3

Parece que pasan muchas cosas en segundo plano para TinyMCE y esto no funcionará. – Failpunk

9

Si está utilizando tinymce con jQuery. El siguiente trabajo

$("#id_of_textarea").tinymce().focus(); 

sólo se puede hacer esto después de que el editor ha inicializado sin embargo y por lo que es posible que tenga que esperar en uno de sus eventos de inicialización.

7

Lo que realmente funciona es configurar una opción en el configfile (o archivo jquery) Esta opción le permite enfocar automáticamente una instancia del editor. El valor de esta opción debe ser una ID de instancia del editor. El Id. De instancia del editor es id para el elemento textarea original o <div> que fue reemplazado.

Ejemplo de uso de la opción de auto_focus:

tinyMCE.init({ 
    //... 
    auto_focus : "elm1" 
}); 
+0

Funcionó bien aquí. Puse una condición en mi código que verifica la existencia del atributo "autofocus" en el campo textarea. Si es verdadero, auto_focus está configurado para textarea id, de lo contrario, auto_focus está configurado como falso. –

19

Sé que esto es una entrada antigua, pero sólo para añadir mi entrada por tener el editor abierto y enfoque no funciona. Lo que encontré que trabajó para mí era la siguiente:

tinyMCE.activeEditor.focus(); 

tuve que configurar esto en un evento window.setTimeout por la forma en que estaba usando objetos JS y tal. Espero que esto ayude.

+0

Esto funcionó muy bien para mí: setTimeout ("try {tinymce.activeEditor.focus()} catch (e) {}", 2000); –

+0

Funcionó para mí :-) Obtiene mi upvote – gchq

5

Parece que para TinyMCE 4 algunas de estas soluciones ya no funcionan.

// No parece que trabajar en TinyMCE 4

tinymce.execCommand('mceFocus',false,'id_of_textarea'); 

// no funcionó

$("id_of_textarea").tinymce().focus(); 

tinyMCE.activeEditor.focus(); 

Lo que funciona para mí

// Funciona muy bien en Chrome, pero no en absoluto en Firefox

tinyMCE.init({ 
    //... 
    auto_focus : "id_of_textarea" 
}); 

// Añadir este modo Firefox también funciona

init_instance_callback : "customInitInstanceForTinyMce", // property to add into tinyMCE.init() 

function customInitInstanceForTinyMce() { 
    setTimeout(function() {       // you may not need the timeout 
     tinyMCE.get('Description').focus(); 
    }, 500); 
} 
+0

Im trabajando con tinymce 4.x y este funciona para mí: tinymce.execCommand ('mceFocus', false, 'id_of_textarea'); Comienzo este comando DESPUÉS de que todo esté inicializado y el editor esté visible en la pantalla. – Jonny

4
tinyMCE.get('Description').getBody().focus();

lo anterior funciona en Firefox, Chrome e IE también. No lo he probado en otros navegadores.

+0

No estoy seguro por qué, pero la respuesta aceptada no funcionó para mí, mientras que esta sí. – Marcus

+0

Gracias @Marcus !! –

+0

Este está funcionando –

0

Tengo que funcione con TinyMCE 4.x utilizando el siguiente:

tinymce.EditorManager.get('id_of_editor_instance').focus();

0

utilizo la siguiente función para enfocar el editor con thinyMCE Esto es usando jQuery, pero sería fácil de quitar esto y usar document.querySelectorAll(). Use babel si necesita esto en es5.

let focusEditor = function(editorContainer) { 
    let tinymce; 
    if (/iPad|iPhone|iPod/.test(navigator.platform)) { return; } 
    let id = $('.text-editor', editorContainer.innerHTML).first().attr('id'); 
    if (tinymce = window.tinyMCE.get(id)) { 
    try { 
     return tinymce.focus(); 
    } catch (error) { 
     return tinymce.on('init', function() { return this.focus(); }); 
    } 
    } else { 
    return $(`#${id}`, editorContainer).focus(); 
    } 
} 

El editorContainer es cualquier elemento que rodea el área de texto tinyMCE, por ejemplo un div con id 'text-contenedor' que podría llamar focusEditor($('#text-container')) o en React focusEditor(React.findDOMNode(this))

0

Esto funciona para mí (versión 4.7.6 TinyMCE):

tinymce.activeEditor.fire("focus") 
Cuestiones relacionadas