Full Calendar换行问题求助:textarea输入换行引发JS语法错误
问题分析
核心问题是PHP输出带换行的字符串到JS时未转义,导致JS语法错误。当$booking->notes包含换行符时,直接用'{{ $booking->notes }}'输出会让JS字符串出现物理换行,违反JS语法规则,触发Uncaught SyntaxError,进而导致FullCalendar崩溃。
解决方案
1. 修复JS字符串转义问题
修改FullCalendar事件定义中的content字段,用PHP的json_encode()处理带换行的字符串,确保输出到JS的内容是合法的字符串:
events : [ @foreach($bookings as $booking) { bookingId : '{{ $booking->id }}', title : '{{ $booking->booking_contact }}', start : '{{ $booking->booking_start }}', end: '{{ $booking->booking_end }}', content : {!! json_encode($booking->notes) !!}, // 改用json_encode处理 }, @endforeach ],
- 用
{!! !!}替代{{ }}:{{ }}会转义HTML实体(比如把"变成"),而json_encode()已经生成了符合JS规范的字符串,不需要额外HTML转义。 json_encode()会自动将字符串中的换行符\n转义为\\n,同时处理引号等其他特殊字符,确保JS能正确解析。
2. 正确处理数据库存储与显示
- 存储阶段:直接保存textarea提交的原始内容(保留
\n换行符),不要提前用nl2br()处理。nl2br()是用于HTML显示时将换行转换为<br>标签的,不应在存储阶段使用。 - HTML显示阶段:如果需要在非textarea的HTML区域显示带换行的内容,再调用
nl2br()转换,示例:
{{ nl2br($booking->notes) }}
3. 验证效果
修改后,JS生成的content字段会是类似这样的合法字符串:
content : "Arriving at 19.20pm\nDeparting at 20.05pm\n1075 euros cash on arrival....",
FullCalendar能正常解析事件数据,不会崩溃;同时$('#notes').val(calEvent.content)会自动将\n转换为textarea中的换行,保留原始格式。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

