【问题标题】:summernote editor not opening (laravel 5.2)Summernote 编辑器未打开(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'); 的结果是什么?在你的控制台中?
  • 那么您的屏幕上根本没有该元素。你的循环似乎是错误的

标签: javascript php jquery laravel summernote


【解决方案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 并激活了编辑按钮。我希望这是理想的行为。
猜你喜欢
  • 2021-04-15
  • 2017-01-10
  • 2017-01-03
  • 2018-09-04
  • 2016-06-13
  • 2016-03-29
  • 1970-01-01
  • 2016-01-20
  • 2018-02-16
相关资源
最近更新 更多