tinymce – wp_editor deshabilitar después de alcanzar el límite de recuento de caracteres

Pregunta:

Quiero deshabilitar la entrada en una instancia de wp_editor en la interfaz. Esto rastrea con precisión el número de caracteres, pero permite la entrada después de que se alcanza el límite.

function my_char_count( $initArray ) {

  if ( ! is_admin() ) {   

    $initArray['setup'] = <<<JS
[function(ed) {
    ed.on('keyup', function(e) {

        var content = ed.getContent().replace(/(<[a-zA-Z\/][^<>]*>|\[([^\]]+)\])|(\s+)/ig,''); 
        var max = 20;
        var len = content.length;

        var diff = max - len; 
        if ( diff < 1 ) {
            // none of these prevents input
            ed.stopPropagation();
            ed.preventDefault();
            tinymce.dom.Event.cancel(e);
            return false;

        }    
        document.getElementById("character_count").innerHTML = "Characters Left: " + diff;    

    });

}][0]
JS;
  }

    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'my_char_count' );

Respuesta:

Supongo que el evento de keyup es demasiado tarde.

Si usa el evento keypress lugar de keyup , entonces esto parece funcionar:

ed.on( 'keypress', function(e) {
    var content = ed.getContent().replace(
        /(<[a-zA-Z\/][^<>]*>|\[([^\]]+)\])|(\s+)/ig, '' );
    var max = 20;
    var len = content.length;
    var diff = max - len;       

    if ( diff < 1 )
        tinymce.dom.Event.cancel(e);

    document.getElementById("character_count").innerHTML = "Characters Left: " + diff;
} );

El evento de keypress no registrará teclas como Alt , Enter , Control , ArrowUp , … así que cuando se alcance la longitud máxima permitida del contenido, ¡no nos atascaremos !

Esto también debería funcionar para la keydown , pero registra todas las claves, por lo que tendríamos que agregar excepciones para las claves permitidas.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım