首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预览不立即显示

预览不立即显示
EN

Stack Overflow用户
提问于 2017-01-08 08:11:26
回答 1查看 37关注 0票数 0

当我点击文本框顶部的按钮时,它会打开超链接模式或图像插入模式,如下面的代码示例所示。

我可以创建和插入链接和图像很好。

无论怎样,当我创建链接或图像,并单击保存模态,预览不会立即显示,我必须按一个键在文本区域,以看到新的变化预览。

问题:当我从引导模式中添加一个新的超链接或图像并单击保存时,如何确保更改立即显示在预览中。使用showdown.js

CODEPEN实例

脚本

代码语言:javascript
复制
$("#message").on('keyup paste copy change', function() {
var text = document.getElementById('message').value,
      target = document.getElementById('showdown'),
      converter = new showdown.Converter({parseImgDimensions: true}),
      html = converter.makeHtml(text);

    target.innerHTML = html;
});

完整脚本

代码语言:javascript
复制
$('#button-link').on('click', function() {
    $('#myLink').modal('show');
});

$('#button-image').on('click', function() {
    $('#myImage').modal('show');
}); 

$('#button-smile').on('click', function() {
    $('#mySmile').modal('show');
});

$('#myLink').on('shown.bs.modal', function() {
    var textarea = document.getElementById("message");
    var len = textarea.value.length;
    var start = textarea.selectionStart;
    var end = textarea.selectionEnd;
    var selectedText = textarea.value.substring(start, end);
    $('#link_title').val(selectedText);
    $('#link_url').val('http://');
});  

$('#myImage').on('shown.bs.modal', function() {
    $("#image_url").attr("placeholder", "http://www.example.com/image.png");
});

$("#save-image").on('click', function(e) {
    var textarea = document.getElementById("message");
    var len = textarea.value.length;
    var start = textarea.selectionStart;
    var end = textarea.selectionEnd;
    var selectedText = textarea.value.substring(start, end);
    var counter = findAvailableNumber(textarea);

    var replace_word = '![enter image description here]' + '[' + counter + ']';

    if (counter == 1) {

        if ($('input#image_width').val().length > 0) {
            var add_link = '\n\n' + '   [' + counter + ']: ' + $('#image_url').val() + ' =' + $('input#image_width').val() + 'x' + $('input#image_height').val();
        } else {
            var add_link = '\n\n' + '   [' + counter + ']: ' + $('#image_url').val();
        }

    } else {
        var add_link = '\n' + '   [' + counter + ']: ' + $('#image_url').val();
    }

    textarea.value = textarea.value.substring(0, start) + replace_word + textarea.value.substring(end,len) + add_link;
}); 

$("#save-link").on('click', function(e) {
    var textarea = document.getElementById("message");
    var len = textarea.value.length;
    var start = textarea.selectionStart;
    var end = textarea.selectionEnd;
    var selectedText = textarea.value.substring(start, end);
    var counter = findAvailableNumber(textarea);

    if ($('#link_title').val().length > 0) {
        var replace_word = '[' + $('#link_title').val() + ']' + '[' + counter + ']';
    } else {
        var replace_word = '[enter link description here]' + '[' + counter + ']';
    }

    if (counter == 1) {
        var add_link = '\n\n' + '   [' + counter + ']: ' + $('#link_url').val();
    } else {
        var add_link = '\n' + '   [' + counter + ']: ' + $('#link_url').val();
    }

    textarea.value = textarea.value.substring(0, start) + replace_word + textarea.value.substring(end,len) + add_link;
});

function findAvailableNumber(textarea){
    var number = 1;

    var a = textarea.value;

    if(a.indexOf('[1]') > -1){

        //Find lines with links

        var matches = a.match(/(^|\n)\s*\[\d+\]:/g);

        //Find corresponding numbers

        var usedNumbers = matches.map(function(match){
            return parseInt(match.match(/\d+/)[0]); }
        );

        //Find first unused number

        var number = 1;

        while(true){

            if(usedNumbers.indexOf(number) === -1){

                //Found unused number

                return number;
            }

            number++;
        }
    }

    return number;
}

$("#message").on('keyup paste copy change', function() {
var text = document.getElementById('message').value,
      target = document.getElementById('showdown'),
      converter = new showdown.Converter({parseImgDimensions: true}),
      html = converter.makeHtml(text);

    target.innerHTML = html;
});

$(function () {
  $('[data-toggle="tooltip"]').tooltip()
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-08 08:24:48

只需在keyup结束时触发$("#save-link").on('click', function(e) {});事件

我假设jQuery设置值不会触发在$("#message")上设置的任何相关事件

代码语言:javascript
复制
$("#message").trigger('keyup');

刚在密码上测试过,效果很好,

代码语言:javascript
复制
$("#save-link").on('click', function(e) {
    //All your code
    // ....

    $("#message").trigger('keyup');
});

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41530760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档