Search code examples
jquerytinymce

Tinymce html5 placeholder by reading attribute from textarea


For standard textareas I use this plugin to create a placeholder. How can I extend tinymce so that this works in this way also.

E.g the default value is read from the textarea attribute then cleared when a user focuses on the iframe.

Similar to this for CKEditor: http://alfonsoml.blogspot.com.es/2012/04/placeholder-text-in-ckeditor.html


Solution

  • I refactored Tom Duke's code to work on TinyMCE4 with it's jquery plugin

    $('textarea.tinymce').tinymce({
      script_url: _base + '/assets/js/tinymce/tinymce.min.js',
      theme: "modern",
      setup: function(editor) {
        // Set placeholder
        var placeholder = $('#' + editor.id).attr('placeholder');
        if (typeof placeholder !== 'undefined' && placeholder !== false) {
          var is_default = false;
          editor.on('init', function() {
            // get the current content
            var cont = editor.getContent();
    
            // If its empty and we have a placeholder set the value
            if (cont.length === 0) {
              editor.setContent(placeholder);
              // Get updated content
              cont = placeholder;
            }
            // convert to plain text and compare strings
            is_default = (cont == placeholder);
    
            // nothing to do
            if (!is_default) {
              return;
            }
          })
          .on('focus', function() {
            // replace the default content on focus if the same as original placeholder
            if (is_default) {
              editor.setContent('');
            }
          })
          .on('blur', function() {
            if (editor.getContent().length === 0) {
              editor.setContent(placeholder);
            }
          });
        }
      }
    });