达到字符数限制后禁用WP_EDITOR

时间:2016-08-20 作者:shanebp

我想禁用前端wp\\U编辑器实例的输入。这可以准确跟踪字符数,但允许在达到限制后输入。

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\' );

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我想keyup 事件太晚了。

如果您使用keypress 事件而不是keyup, 那么这似乎是可行的:

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;
} );
Thekeypress 事件不会记录诸如Alt、Enter、Control、ArrowUp等键。。。因此,当达到允许的最大内容长度时,我们不会陷入困境!

这也适用于keydown, 但它会记录所有密钥,因此我们必须为允许的密钥添加例外。