当summernote div改变时Textarea值改变

Posted

技术标签:

【中文标题】当summernote div改变时Textarea值改变【英文标题】:Textarea value change when summernote div is changed 【发布时间】:2014-04-03 21:07:22 【问题描述】:

我已经为 Summernote 设置了一个 div 来更改从数据库中提取的文本。

<div id="summernote" class="form-control"><?php echo $laws['content']; ?></div> 

$(document).ready(function() 
   $('#summernote').summernote(
     height: 300,
   );
);

直接在 div 之后我有一个带有 ID 的文本区域。

<textarea id="lawsContent"></textarea>

我希望 textarea 的内容在我输入summernote div 时发生变化。就像我输入这个问题时发生的事情一样。

【问题讨论】:

你试过什么? Summernote API 文档 (hackerwins.github.io/summernote/features.html#api-summernote) 显示了一种方法。提示:尝试组合使用 keyup 事件处理程序和 .code() 函数。 【参考方案1】:

使用summernote API

我想出了这个解决方案:

$(document).ready(function() 
    $('#summernote').summernote(
      onKeyup: function(e) 
        $("#lawsContent").val($("#summernote").code());
      ,
      height: 300,
    );
);

【讨论】:

您不必自己执行此操作。 v0.7.0 之后 textarea 会自动同步。 github.com/summernote/summernote/blob/develop/src/js/base/… .code() 方法对我不起作用 - 我认为它已更改为 $('#summernote').summernote('code')【参考方案2】:

我认为最好处理onChange 事件。

v0.7.0

$('#summernote').summernote(
  callbacks: 
    onChange: function(contents, $editable) 
      console.log('onChange:', contents, $editable);
    
  
);

$(document).ready(function()

    $("#summernote").summernote(
        
            height: "10em",
            callbacks: 
              onChange: function (contents, $editable) 
                var code = $(this).summernote("code");
                $("#lawsContent").val(code);
              
            
        
    );

);
#lawsContent

    width: 100%;
    height: 10em;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.7.0/summernote.min.js"></script>
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.7.0/summernote.min.css" rel="stylesheet"/>


Editor:
<div id="summernote" class="form-control"></div>

Output:
<textarea id="lawsContent" class="form-control"></textarea>

v0.6.5

截至此版本,callback only works with camel case string。

$('#summernote').summernote(
  onChange: function(contents, $editable) 
    console.log('onChange:', contents, $editable);
  
);

$(document).ready(function()

    $("#summernote").summernote(
        
            height: "10em",
            onChange: function (contents, $editable) 
                $("#lawsContent").val(contents);
            
        
    );

);
#lawsContent

    width: 100%;
    height: 10em;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.6.7/summernote.min.js"></script>

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/summernote/0.6.7/summernote.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>


Editor:
<div id="summernote" class="form-control"></div>

Output:
<textarea id="lawsContent" class="form-control"></textarea>

【讨论】:

【参考方案3】:

受@user3367639 启发,这是一种更通用的方法

$('.summernote').each(function () 
    var $textArea = $(this);

    $textArea.summernote(
        onKeyup: function (e) 
            $textArea.val($(this).code());
            $textArea.change(); //To update any action binded on the control
        
    );
);

用这个方法:

String.prototype.strip = function()

   var tmpDiv = document.createElement("div");
   tmpDiv.innerHTML = this;
   return tmpDiv.textContent || tmpDiv.innerText || "";

你可以在你的 JS 控制器中做这样的事情来获取你的 textarea 的文本值

$myTextArea.val().strip(); //Where val() returns the html and strip() returns the text

希望这会有所帮助

【讨论】:

【参考方案4】:

使用这个例子:

<form id="form_id" action="/summernote.php" onsubmit="return postForm()">
    <textarea id="summernote" rows="6" name="textarea_name" ></textarea>
</form>

<script type="text/javascript">
    $(document).ready(function()
        var postForm = function() 
            var content = $('textarea[name="textarea_name"]').html($('#summernote').code());
        
    );
</script>

【讨论】:

【参考方案5】:

$('textarea').summernote(
  callbacks: 
    onChange: function(contents, $editable) 
      console.log('onChange:', contents, $editable);
    
  
)


<form>
<textarea name="content" onChange></textarea>
</form>

【讨论】:

【参考方案6】:
<div role="tabpanel" class="tab-pane" id="product_desc_l">
    <p>
        First impressions are everything. <br> <br>
    </p>
    <strong>Features:</strong>
</div>

<textarea id="product_desc_long" name="product_desc_long"  class="summernote form-control" rows="10" placeholder="Enter the product long description..."></textarea>


$(document).ready(function() 
      $('.summernote').summernote(
        height: 300,
        onKeyup: function(e) 
           $("#product_desc_l").html($(this).code());
        
      );
);

这对我有用

【讨论】:

以上是关于当summernote div改变时Textarea值改变的主要内容,如果未能解决你的问题,请参考以下文章

我正在使用 Summernote。使用 Jquery focusout() 作为它的 div 但它不起作用

如何获取 ngx-Summernote 运行时的价值

在流星 js 中显示来自 mongodb 的 Summernote 内容时出错

Summernote 在 Angular 8 中无法正确更改内容

summernote - 在 HTML 视图中更新代码

当 div 内容改变和 div 增长时 CSS3 过渡