it-swarm.com.de

wp_editor deaktivieren nachlassen der Zeichenanzahlgrenze

Ich möchte die Eingabe in eine Instanz von wp_editor am Frontend deaktivieren. Dies verfolgt die Anzahl der Zeichen genau, ermöglicht jedoch die Eingabe nach Erreichen des Grenzwerts.

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' );
5
shanebp

Ich denke, das Ereignis keyup ist zu spät.

Wenn Sie das Ereignis keypress anstelle von keyup verwenden, scheint dies zu funktionieren:

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

Das Ereignis keypress protokolliert keine Tasten wie Alt , Enter , Control , ArrowUp , .... Wenn also die maximal zulässige Inhaltslänge erreicht ist, werden wir keine erhalten stecken!

Dies sollte auch für die keydown funktionieren, protokolliert jedoch alle Schlüssel, sodass wir dann Ausnahmen für die zulässigen Schlüssel hinzufügen müssen.

3
birgire