Laravel 5.6模态表单点击编辑时name字段无法加载数据库数据
解决模态框编辑时name输入框无法填充的问题
我帮你排查了代码里的问题,核心原因大概率是编辑按钮的data-name属性没正确包裹引号,导致HTML解析出错,jQuery拿不到完整的name值。下面给你一步步的解决思路和修复方案:
1. 修复表格行中编辑按钮的data属性引号问题
看你AJAX成功后替换表格行的这段代码:
$('#brc' + id).replaceWith("<tr id='brc" + data.id + "'><td>" + data.id + "</td><td>" + data.name + "</td><td><button type='button' class='btn btn-info btn-xs editpolicy' data-descr=" + data.description + " data-name=" + data.name + " data-id=" + id + "><i class='fa fa-edit'></i>Edit</button>...</td></tr>");
这里的data-name=" + data.name + "没有给属性值加引号,如果你的policy名称里有空格或者特殊字符(比如&、括号之类的),HTML会把第一个空格后的内容当成新属性,导致$(this).data('name')只能拿到半截内容,甚至完全取不到值。
修复方式:给所有data属性的值加上转义的双引号:
$('#brc' + id).replaceWith("<tr id='brc" + data.id + "'><td>" + data.id + "</td><td>" + data.name + "</td><td><button type='button' class='btn btn-info btn-xs editpolicy' data-descr=\"" + data.description + "\" data-name=\"" + data.name + "\" data-id=\"" + id + "\"><i class='fa fa-edit'></i>Edit</button><button type='button' class='btn btn-info btn-xs viewpolicy' data-descr=\"" + data.description + "\" data-name=\"" + data.name + "\" data-id=\"" + id + "\"><i class='fa fa-eye'></i>View</button><button type='button' class='btn btn-danger btn-xs delpolicy' data-id=\"" + id + "\"><i class='fa fa-trash'></i>Delete</button></td></tr>");
用\"来包裹属性值,避免和外层的双引号冲突,这样不管name里有什么字符,都能被正确解析。
2. 检查初始渲染的表格按钮是否也有同样问题
如果页面加载时就有的表格行,编辑按钮也要确保data属性是带引号的,比如在Blade模板里应该这么写:
<button type='button' class='btn btn-info btn-xs editpolicy' data-descr="{{ $policy->description }}" data-name="{{ $policy->name }}" data-id="{{ $policy->id }}"> <i class='fa fa-edit'></i>Edit </button>
Blade的{{ }}会自动转义特殊字符,同时帮你把属性值正确包裹在引号里。
3. 加日志调试确认值是否正确获取
你可以在编辑按钮的点击事件里加一行日志,看看拿到的name值是不是你预期的:
$(document).on("click", ".editpolicy", function() { console.log("获取到的Policy名称:", $(this).data('name')); // 新增日志 $('#edpid').val($(this).data('id')); $('#editpolicyid').val($(this).data('id')); $('#edname').val($(this).data('name')); $('#eddescr').val($(this).data('descr')); $('#policyeditmodel').modal('show'); });
打开浏览器控制台(按F12),点击编辑按钮,看日志里的name值是否正确。如果日志里就不对,那肯定是按钮的data属性设置有问题。
4. 额外的小检查点
- 确认你的
Policy模型里的$fillable包含name和description字段,确保update时能正确赋值:
class Policy extends Model { protected $fillable = ['name', 'description']; }
不过看你的update方法是直接赋值后save,这个问题不大,但如果模型有$guarded设置,也要确保没限制这些字段。
- 可以在AJAX的success回调里加
console.log(data),看看返回的policy对象里name字段是否正确。
按照上面的步骤来,应该就能解决模态框name输入框无法填充的问题了。
内容的提问来源于stack exchange,提问作者S.Sakthybaalan
相关产品推荐
相关产品推荐

