javascript - 保存内容通过 Rails 中的表单到我的数据库
问题描述
我正在尝试<div contenteditable="true">
通过表单将 a 的内容保存到我的 Rails 应用程序中的数据库中,以便用户可以保存和更新它。
这是设置:
<div>
用户获得一个包含with的视图(即 /posts/1)contenteditable= "true"
。我添加了 javacript 给我一个“保存”按钮和一个隐藏字段,它将捕获 div 的内容以进行保存,如Can div with contenteditable=true be pass through form 中所建议的那样?. 然后将其更改为遵循同一问题中的建议。
<%= form_for @post do |form| %>
<%= form.hidden_field :content %>
<%= form.submit "Save" %>
<% end %>
<div id="content" contenteditable="true">
<p>Hello</p>
</div>
<script>
document.getElementById('content').addEventListener('input', function(ev){
document.getElementById('post_content').value = ev.target.innerHTML;
})
</script>
我正在寻找的行为是这种形式,一旦我按“保存”,将所有内容保存<div id="content">
到@post.content
我已添加:content
到我post_params
的posts_controller.rb
def post_params
params.require(:post).permit(:user_id, :content)
end
但它不起作用。@post.content
一如既往nil
。
服务器日志显示参数 :content 正在发送,但为空!
Started PATCH "/posts/3" for ::1 at 2019-10-01 19:36:24 +0200
Processing by PostsController#update as HTML
Parameters: {"authenticity_token"=>"SRzcfcrBWOCdaWeJkp6rCRw94Ex2XLuVvnc3Bt1dFP1JFz36NCNTcxcuOVqzymlIGq9sveaE/+OkDnaHv3kJNQ==", "post"=>{"content"=>""}, "commit"=>"Save", "id"=>"3"}
任何猜测我做错了什么?提前致谢
解决方案
您以错误的方式设置值。您想将“post_content”值设置为“content”innerHTML。
document.getElemenetById('post_content') = document.getElementById('content').innerHTML;
此外,您应该使用hidden
input 而不是textarea
with display:none
。
最后,确保该功能被触发。我认为“onsubmit”回调没有正确触发,因为 form_with 拦截表单提交并执行 ajax 请求。
就我个人而言,我会在 contenteditable 元素上收听input
事件,这样您就不必依赖表单提交:
document.getElementById('content').addEventListener('input', function(ev){
document.getElementById('post_content').value = ev.target.innerHTML;
})
现在,每次您更改 contenteditable 内容时,您都会立即更新输入。
推荐阅读
- python - 如何使用 pandas 从 csv 中过滤掉非英语数据
- node.js - 使用 NodeJS 从 slack API 获取用户列表
- java - 更改 JTable 标题高度
- python - 几个成功的批次后 Cuda 内存不足错误
- r - R:plotTree.wBars 中出现错误“找不到对象‘添加’”
- backbone.js - 主干/requirejs 视图奇怪的行为
- php - 如何使用 glob 检查文件夹是否有子文件夹?
- angular - VM Clarity - 无法使用带有 clr-control-error 的自定义验证器
- php - 如何修复php ajax搜索功能中的错误,因为它只显示mysql表的最后一个值
- python - 在 Django 中,如何统计模型中的数据数量和管理中的输出?