Laravel报Undefined offset: -1且JQuery获取input值异常如何解决?
1. Undefined offset: -1 错误触发原因
该错误由数组下标越界导致:
代码中计算选中运费下标的逻辑为 $selected_rate_index = count($rates) - 1;,如果业务逻辑返回的$rates是空数组,count($rates)的计算结果为0,最终得到的下标就是-1,PHP不允许访问数组的负数下标,因此抛出该错误。
修复方案:访问数组前先判断数组是否非空
if (!empty($rates)) { $selected_rate_index = count($rates) - 1; $selected_rate = $rates[$selected_rate_index]; $selected_rate_object_id = $selected_rate['object_id']; }
2. 无法获取运费数值的原因
你当前单选框的value属性绑定的是{{ $rate->object_id }},alert弹出的32位字符串就是这个对象ID,不是运费金额。可以根据业务需求二选一修改:
方案1:直接把value绑定为金额
如果提交表单只需要传金额,直接修改input的value属性即可:
<input type="radio" class="pull-right rate-value" name="rate" value="{{ $rate->amount }}">
原有jQuery代码可以直接拿到金额值,只需补充阻止默认提交逻辑,避免页面刷新导致alert一闪而过:
$("button").click(function(e){ e.preventDefault(); var val = $("input[name='rate']:checked").val(); alert('$' + val); });
方案2:新增自定义属性存储金额
如果提交表单仍需要用到object_id,可以新增data-自定义属性存储金额:
<input type="radio" class="pull-right rate-value" name="rate" value="{{ $rate->object_id }}" data-amount="{{ $rate->amount }}">
修改jQuery代码从自定义属性取值:
$("button").click(function(e){ e.preventDefault(); var selected = $("input[name='rate']:checked"); if(selected.length) { // 拿ID用selected.val(),拿金额用下面的方法 var amount = selected.data('amount'); alert('$' + amount); } });
内容的提问来源于stack exchange,提问作者D.T
相关产品推荐
相关产品推荐

