简体   繁体   English

tinyMCE编辑器无法即时更新

[英]tinyMCE editor not updating on the fly

I have a HTML form with tinyMCE editor in it the form has an image upload option with a button which on click sends the file to ajax which then posts the value to the controller and uploads the image, I am good till here and everything is working. 我有一个带有tinyMCE编辑器的HTML表单,该表单中有一个带有按钮的图像上传选项,单击该按钮会将文件发送到ajax,然后将值发布到控制器并将图像上传,我一直很好,直到这里一切正常。 What I want is once the image has been uploaded it should be appended to the editor which is not happening. 我想要的是,一旦图像上传完毕,就应该将其添加到没有发生的编辑器中。 My javascript: 我的JavaScript:

$('#uploadImageOnTheFly').click(function()
{
var photo = document.getElementById('photo');

var formData = new FormData();

formData.append('photo', photo.files[0], photo.value);

var editorvalue = $('#textbody').val();
$.ajax({
    type: 'POST',
    url: '/admin/uploadPhotoForTemplate',
    data: formData,
    contentType: false,
    processData: false,
    success: function (data) {
        var parsed = JSON.parse(data);
        if(parsed.status === 'success')
        {
            var body = $('#textbody');
            html = '<img src="' +parsed.url +'">';
            body.prepend(html);
        }
    }
});
});

My HTML form : 我的HTML表单:

<div class="form-wrap">
    <div class="panel panel-body">
        <form method="POST" action="http://127.0.0.1/admin/infringing/email/templates/show/1" accept-charset="UTF-8"><input name="_token" type="hidden" value="vsKR2MtkUxpTI7ku97Hsknz8RurV4ioQeJLkA9NP">
        <div class="form-group">
            <label for="name">Name</label>
            <input class="form-control" name="name" type="text" value="Alibaba edited" id="name">
        </div>
        <div class="form-group">
            <label for="email">Email</label>
            <input class="form-control" name="email" type="text" value="contact@alibaba.com" id="email">
        </div>

        <div class="form-group">
            <label for="subject">Subject</label>
            <input class="form-control" name="subject" type="text" value="Testing" id="subject">
        </div>

        <div class="form-group">
            <div class="input-group">
                <input type="file" id="photo">
                <span class="input-group-btn">
                    <button type="button" id="uploadImageOnTheFly" class="btn btn-info">Upload</button>
                    </span>
            </div>
        </div>

        <textarea style="min-height: 400px;" name="body" id="textbody">Data fetched from database goes here ...</textarea>
        <br/>

        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-success">
            <button type="button" class="btn btn-danger">Cancel</button>
        </div>
        </form>
    </div>
</div>

and my laravel controller : 和我的laravel控制器:

public function upload()
{
    if(Input::hasFile('photo'))
    {
        $allowedext = ["png", "jpg", "jpeg", "gif"];
        $photo = Input::file('photo');
        $destinationPath = public_path() . '/uploads/templates';
        $filename = str_random(12);
        $extension = $photo->getClientOriginalExtension();
        if(in_array($extension, $allowedext))
        {
            Input::file('photo')->move($destinationPath, $filename . '.' . $extension);
        } else
        {
            return json_encode('File format not supported');
        }

        return json_encode(['status' => 'success', 'url' => '/uploads/templates/' . $filename . '.' . $extension]);
    } else
    {
        return json_encode(['status' => 'failure']);
    }
}

EDIT tinyMCE calling script 编辑 tinyMCE调用脚本

<script type="text/javascript" src="/tinymce/tinymce.min.js"></script>

<script type="text/javascript">
tinymce.init({
    selector: "textarea",
    plugins: [
        "advlist autolink autosave link image lists charmap print preview hr anchor pagebreak spellchecker",
        "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
        "table contextmenu directionality emoticons template textcolor paste fullpage textcolor"
    ],

    toolbar1: "newdocument fullpage | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | styleselect formatselect fontselect fontsizeselect",
    toolbar2: "cut copy paste | searchreplace | bullist numlist | outdent indent blockquote | undo redo | link unlink anchor image media code | inserttime preview | forecolor backcolor",
    toolbar3: "table | hr removeformat | subscript superscript | charmap emoticons | print fullscreen | ltr rtl | spellchecker | visualchars visualblocks nonbreaking template pagebreak restoredraft",

    menubar: false,
    toolbar_items_size: 'small',

    style_formats: [
        {title: 'Bold text', inline: 'b'},
        {title: 'Red text', inline: 'span', styles: {color: '#ff0000'}},
        {title: 'Red header', block: 'h1', styles: {color: '#ff0000'}},
        {title: 'Example 1', inline: 'span', classes: 'example1'},
        {title: 'Example 2', inline: 'span', classes: 'example2'},
        {title: 'Table styles'},
        {title: 'Table row 1', selector: 'tr', classes: 'tablerow1'}
    ],

    templates: [
        {title: 'Test template 1', content: 'Test 1'},
        {title: 'Test template 2', content: 'Test 2'}
    ]
});</script>

Most probably the problem is between line 18-23 in javascript 最可能的问题是在javascript中的第18-23行之间

Try to add setup block for init script. 尝试为初始化脚本添加setup块。

<script type="text/javascript">

  tinymce.init({
    selector: "textarea",
    plugins: [
        "advlist autolink autosave link image lists charmap print preview hr anchor pagebreak spellchecker",
        "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
        "table contextmenu directionality emoticons template textcolor paste fullpage textcolor"
    ],

    toolbar1: "newdocument fullpage | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | styleselect formatselect fontselect fontsizeselect",
    toolbar2: "cut copy paste | searchreplace | bullist numlist | outdent indent blockquote | undo redo | link unlink anchor image media code | inserttime preview | forecolor backcolor",
    toolbar3: "table | hr removeformat | subscript superscript | charmap emoticons | print fullscreen | ltr rtl | spellchecker | visualchars visualblocks nonbreaking template pagebreak restoredraft",

    menubar: false,
    toolbar_items_size: 'small',

    style_formats: [
        {title: 'Bold text', inline: 'b'},
        {title: 'Red text', inline: 'span', styles: {color: '#ff0000'}},
        {title: 'Red header', block: 'h1', styles: {color: '#ff0000'}},
        {title: 'Example 1', inline: 'span', classes: 'example1'},
        {title: 'Example 2', inline: 'span', classes: 'example2'},
        {title: 'Table styles'},
        {title: 'Table row 1', selector: 'tr', classes: 'tablerow1'}
    ],

    templates: [
        {title: 'Test template 1', content: 'Test 1'},
        {title: 'Test template 2', content: 'Test 2'}
    ],
    setup: function(ed) {
        ed.on('change', function(e) {
            tinyMCE.triggerSave();
        });
    }
});

You are adding the image element to the tinymce source element instead of the editor. 您正在将image元素添加到tinymce源元素中,而不是在编辑器中。 Try to use this on ajax success: 尝试在ajax成功上使用此方法:

success: function (data) {
    var parsed = JSON.parse(data);
    if(parsed.status === 'success')
    {
        // gets the editor body
        var editor = tinymce.get('textbody');

        // create the image tag as a string
        var html = '<img src="' +parsed.url +'">';

        // insert the image at the caret position of the editor
        editor.execCommand('insertHTML', false, html);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM