更改summernote div时,Textarea值会发生变化

use*_*639 15 html javascript css jquery summernote

我已经为summernote设置了一个div来改变从数据库中提取的文本.

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

$(document).ready(function() {
   $('#summernote').summernote({
     height: 300,
   });
});
Run Code Online (Sandbox Code Playgroud)

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

<textarea id="lawsContent"></textarea>
Run Code Online (Sandbox Code Playgroud)

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

use*_*639 16

使用summernote API

我想出了这个解决方案:

$(document).ready(function() {
    $('#summernote').summernote({
      onKeyup: function(e) {
        $("#lawsContent").val($("#summernote").code());
      },
      height: 300,
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 你不必自己做这件事.在v0.7.0之后,textarea将自动同步.https://github.com/summernote/summernote/blob/develop/src/js/base/module/AutoSync.js (4认同)

Bjø*_*sjå 9

我认为最好处理onChange事件.

v0.7.0

$('#summernote').summernote({
  callbacks: {
    onChange: function(contents, $editable) {
      console.log('onChange:', contents, $editable);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

$(document).ready(function(){

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

});
Run Code Online (Sandbox Code Playgroud)
#lawsContent
{
    width: 100%;
    height: 10em;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

v0.6.5

从此版本开始,回调仅适用于驼峰大小写字符串.

$('#summernote').summernote({
  onChange: function(contents, $editable) {
    console.log('onChange:', contents, $editable);
  }
});
Run Code Online (Sandbox Code Playgroud)

$(document).ready(function(){

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

});
Run Code Online (Sandbox Code Playgroud)
#lawsContent
{
    width: 100%;
    height: 10em;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


RPD*_*ies 6

受@ 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
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

并用这种方法:

String.prototype.strip = function()
{
   var tmpDiv = document.createElement("div");
   tmpDiv.innerHTML = this;
   return tmpDiv.textContent || tmpDiv.innerText || "";
}
Run Code Online (Sandbox Code Playgroud)

您可以在JS控制器中执行类似这样的操作来获取textarea的文本值

$myTextArea.val().strip(); //Where val() returns the html and strip() returns the text
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助