请排查含jQuery操作的Laravel Blade模板代码中的错误
首先先把你的代码格式化一下,方便看清问题:
@foreach($deductionrules as $deductionrule) <tr> <td><b>{{ $deductionrule->leavePenalty }}</b></td> <td><b>{{ $deductionrule->absentPenalty }}</b></td> <td><b>{{ $deductionrule->latePenalty }} | {{ $deductionrule->deductionId }}</b></td> <td align="center"> <button class="btn btn-danger delete-deductionrules" data-iddeductionrules="{{ $deductionrule->deductionId }}" > <i class="fa fa-trash"... </td> </tr> @endforeach
下面是具体的问题(这些问题会直接影响jQuery的正常操作):
未闭合的HTML标签:
你的<button>和<i>标签都没有完成闭合(<i>标签只写了开头,<button>也没有</button>)。这种DOM结构不完整的情况会导致浏览器解析DOM树出错,jQuery无法正确定位到.delete-deductionrules按钮元素,后续的点击事件绑定、数据属性读取都会失效。
修复建议:补全闭合标签,比如改成:<button class="btn btn-danger delete-deductionrules" data-deduction-id="{{ $deductionrule->deductionId }}"> <i class="fa fa-trash"></i> 删除 </button>数据属性命名不规范(影响可读性与后续jQuery取值):
你用了data-iddeductionrules作为自定义数据属性,虽然语法上符合HTML规范,但这种连写的命名方式可读性差,也不符合HTML5数据属性的常规命名习惯(应该用短横线分隔的小写命名)。后续用$(this).data('iddeductionrules')取值时,容易拼写错误。
修复建议:改成data-deduction-id,后续jQuery取值可以用更直观的$(this).data('deductionId')或者$(this).data('deduction-id')(jQuery会自动处理驼峰转换)。动态DOM元素的事件绑定陷阱:
因为这些按钮是通过@foreach循环动态生成的DOM元素,如果你的jQuery代码是直接用$('.delete-deductionrules').click(function(){...})绑定事件,那么只有页面初始加载时存在的元素会绑定事件,后续动态生成的按钮(比如分页加载更多规则时)不会触发事件。
修复建议:使用事件委托方式绑定事件,比如:$(document).on('click', '.delete-deductionrules', function(e) { e.preventDefault(); const deductionId = $(this).data('deduction-id'); // 后续的删除逻辑 });这样不管元素是初始存在还是动态生成的,只要匹配选择器就能触发事件。
代码排版混乱:
原代码所有内容挤在一行,不仅难以阅读,也容易导致标签遗漏、语法错误,调试起来非常麻烦。建议养成良好的代码排版习惯,按HTML结构换行缩进。
内容的提问来源于stack exchange,提问作者Include13

