Summernote 编辑器未打开(laravel 5.2)

Posted

技术标签:

【中文标题】Summernote 编辑器未打开(laravel 5.2)【英文标题】:summernote editor not opening (laravel 5.2) 【发布时间】:2017-01-18 16:18:01 【问题描述】:

我在 laravel 5.2 中使用 Summernote js。

在表单中,当用户点击编辑按钮时,summernote 编辑器应该为字段打开。实际上它适用于单个字段,但当我将它应用于多个字段时,它不起作用。

我的看法:

 <form action="route('account')" id="acc" class="ac" method="post">
  <div class="col-lg-3"><label>Estado</label>
  @foreach($accounts as $account)
  @if($user== $account->user)
  !! $account->estado !!



  <textarea  style="display:none;" name="textfield4" id="textfield4"></textarea>


  <div class="col-lg-2 estado " id="estado"></div>
  @endif
  @endforeach



</div>
  <div class="col-lg-4"></div>
</div>
<div class="row">
  <section class="col-lg-3 "><label for="textfield5">I'm Good At:</label>
  @foreach($accounts as $account)
  @if($user== $account->user)
  !! $account->goodat !!





   <textarea  style="display:none;" name="textfield5" id="textfield5"></textarea>
  <div class="col-lg-2 col-md-2 es" id="goodat"></div>

  @endif
  @endforeach

<br /><div><button type="button" class="btn btn-info edit">Edit</button>
    <button type="submit" class="btn btn-success" id="btn-send-message" >Save</button>
    <input type="hidden" value="Session::token()" name="_token">
    </div>


  </form>

我的脚本:

  <script>
$(document).ready(function()  
var $estado = $('#estado'); 
var $goodat = $('#goodat'); 

var edit = function()  
$estado.summernote(focus: true); 
$goodat.summernote(focus: true); 
; 

$('.edit').on('click', edit); 

$("#acc").on('submit', function(e)  
e.preventDefault(); 
var self = this; 

// lets check some stuff 
console.log($estado); 
console.log($estado.summernote('code')); 
console.log($('#textfield4')); 
console.log($('#textfield4').val()); 
console.log($('#textfield4').text()); 

var estado = $estado.summernote('code'); 
$("#textfield4").val(estado); //populate text area 

var goodat = $goodat.summernote('code'); 
$("#textfield5").val(goodat); //populate text area 

self.submit(); 
return false; 
);
);


</script>

编辑 1:

我发现,在点击保存按钮(导致数据库中的空值)(每次用户登录)后,编辑按钮开始正常工作。

编辑 2:

将所有链接和脚本放入head标签后,错误: $未定义。

     <head>

    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="_token" content=" csrf_token() ">
    <title>@yield('title')</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" integrity="sha384-XdYbMnZ/QjLh6iI4ogqCTaIjrFk87ip+ekIjefZch0Y+PvJ8CDYtEs1ipDmPorQ+" crossorigin="anonymous">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:100,300,400,700">

<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">

<!-- include summernote css/js-->
<link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.css" rel="stylesheet">

    <link rel="stylesheet" type="text/css" href="URL::to('src/css/crush.css')">
    <link rel="stylesheet" type="text/css" href="URL::to('src/css/groups.css')">
    <link rel="stylesheet" type="text/css" href="URL::to('src/css/Untitled-2.css')">
        <link rel="stylesheet" type="text/css" href="URL::to('src/css/font-awesome.css')">

        <link rel="stylesheet" type="text/css" href="URL::to('src/css/style.css')">





<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
 <script   src="https://code.jquery.com/jquery-migrate-1.2.1.min.js" ></script>
 <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.js"></script>
   <script src="/src/js/myplace.js"></script>
   <script src="URL::asset('src/js/script.js')"></script>

</head>

【问题讨论】:

你将它应用于多个领域是什么意思? 我的意思是之前我只为textfield4应用了它(它有效),现在我也想申请textfield5(现在两者都不起作用)(如图所示) 确保调用编辑函数 - 添加 console.log($estado, $goodat);到您的编辑功能并告诉我们控制台输出 $('#estado'); 的结果是什么?在你的控制台中? 那么您的屏幕上根本没有该元素。你的循环似乎是错误的 【参考方案1】:

您想要 Summernote 的多个文本区域?

取:(;

$(function() 
  
  var $estado = $('#estado');
  var $goodat = $('#goodat');
  var isEditorsActive = false;
  function activateEditors() 
    $estado.summernote(
      focus: true
    );

    $goodat.summernote(
      focus: true
    );
    
    isEditorsActive = true;
  
  function deactivateEditors() 
    $estado.summernote('destroy');
    $goodat.summernote('destroy');
    isEditorsActive = false;
  
  $('button.edit').click(function(e)
    e.preventDefault();
    (isEditorsActive)? deactivateEditors() : activateEditors();
  );
  
  
  $("form#ac").submit(function(e) 
    e.preventDefault();
    
    var $this = $(this);
    
    if(isEditorsActive) 
      var estado = $estado.summernote('code');
      var goodat = $goodat.summernote('code');
      
      $('#data-estado').html(estado);
      $('#data-goodat').html(goodat);
    

    return false;
  );
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> 
<!-- include summernote css/js-->
<link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.2/summernote.js"></script>


<form action="route('account')" id="ac" class="ac" method="post">
  <div class="row">
    <div class="col-lg-3">
      <label>Estado</label>
      @foreach($accounts as $account) 
      @if($user== $account->user)
      <div class="estado" id="estado" style="width:100%">
        !! $account->estado !!
      </div>
      @endif 
      @endforeach
    </div>

    <div class="col-lg-3"></div>

    <div class="col-lg-3">
      <label>I'm Good At:</label>
      @foreach($accounts as $account) 
      @if($user==$account->user)
      <div class="goodat" id="goodat" style="width:100%">
        !! $account->goodat !!
      </div>
      @endif 
      @endforeach
    </div>
  </div>
  <button type="submit" class="btn btn-success save">Save</button>
  <button class="btn btn-default edit">Edit</button>
</form>


ESTADO:
<div id="data-estado">
</div>

GOOD AT:
<div id="data-goodat">
</div>

但在此之后您仍然无法获取这些文本区域内的数据 - 所以您的刀片模板确实有问题

http://num8er.me/summernote.html

【讨论】:

实际上我想要多个文本区域点击编辑按钮。 @YaShChaudhary 已修复 在 num8er nope :( ! 未捕获的类型错误:$estado.summernote 不是函数 :D 你甚至还没有将summernote.js 文件附加到模板中!看看它在我的示例中是否有效,即使我没有更改您的模板文件以使其与刀片一起使用。但是您没有将 Summernote 文件注入到模板中。【参考方案2】:

我认为您可能会遇到一些异步问题,因为它有时有效,有时无效。您正在根据 Summernote 字段的值设置 textareas 的值。但是你不能确定$estado.summernote('code') 在使用summernote 字段的值设置textfield4 的值之前已经完成($goodat.summernote('code')textfield5 的值相同。

当您对 summernote 事件使用回调时,您可以防止这种行为并拥有更多控制权。

$('#estado').summernote(
  callbacks: 
    onChange: function(contents, $editable) 
      console.log('onChange:', contents, $editable);
      $("#textfield4").val(contents); //populate text area
    
   
);

阅读更多here

另一件可能引起麻烦的事情是 foreach 循环包含带有硬编码 id 的元素。由于 id 必须是唯一的,这可能会产生一些意想不到的结果。当然,当$user 只匹配$account-&gt;user 一次时,一切都很好,但我通常不会冒险。

更新:添加了一个可能实现的 jsfiddle here。

【讨论】:

我在这里创建了一个 jsfiddle:jsfiddle.net/97tet4so 和一个实现。 为什么不呢?你得到一个错误或什么?一切都呈现在您的视图中了吗? 我已经更新了 JSFiddle 并激活了编辑按钮。我希望这是理想的行为。 让我们continue this discussion in chat。

以上是关于Summernote 编辑器未打开(laravel 5.2)的主要内容,如果未能解决你的问题,请参考以下文章

文本未从 Laravel 中的 Summernote 存储

单击外部编辑器时,Angular js Summernote 下拉菜单未关闭

Summernote(数据未保存在数据库中)(laravel 5.2)

Summernote 显示在所有位置(Laravel 5.2)

Summernote 所见即所得编辑器无法使用 Laravel 5.8 正确呈现数据

使用 Summernote 在 Laravel 中动态内联附件