You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript弹出undefined,控制器与模型无法获取item_id求助

问题排查与修复方案

看起来你遇到了几个连锁问题:item_id 弹出 undefined、alert 不触发,同时后端也拿不到数据。咱们一步步拆解解决:

1. 先解决函数执行中断的核心问题

你的 calc(i) 函数里直接用了 event.keyCode,但没有把 event 作为参数传递到函数里,这会在部分浏览器里抛出「event 未定义」的错误,导致函数执行到这一行就中断了——后面的 alert(item_id) 和 Ajax 请求根本没机会运行。

修复步骤:

  • 修改视图里的 onKeyup 绑定,把 event 传进去:
    <input type='text' name='quantity[]' id='quantity_1' class="form-control addrow quantity" style='width:100%' onKeyup='calc(1, event);'/>
    
  • 同步修改 JS 函数的定义:
    function calc(i, event) { 
      if(event.keyCode == 13) { 
        add_row(); 
      } else { 
        var item_id=$("#item_"+i).val(); 
        alert(item_id); 
        // 后续代码保持不变
      }
    }
    
    这样就能保证函数完整执行,alert 也能正常弹出,方便你调试。

2. 修复 Select 选项渲染的问题

你的视图代码里有两个明显的错误,导致 Select 没有可选项,val() 自然返回 undefined:

  • 没有初始化 $opn1 变量,也没有把拼接好的选项输出到页面;
  • 多余的 print_r($prolist) 会把数组直接打印在页面上,破坏 HTML 结构,导致 Select 元素无法正常被 jQuery 选中。

修复后的视图代码:

<td style='width:20%' id='producttd_1'> 
  <select name='item[]' id='item_1' class="form-control selectpicker" style='width:100%' data-show-subtext="true" data-live-search="true" > 
    <?php 
    $opn1 = ""; // 先初始化变量
    if(!empty($prolist)) { 
      foreach($prolist as $pro) { 
        $opn1.="<option value='".$pro['id']."'>".$pro['product_name']."</option>"; 
      } 
      echo $opn1; // 把拼接好的选项输出到页面
    } 
    ?> 
  </select> 
</td>

3. 验证动态行的 ID 匹配

如果你用 add_row() 动态添加新行,一定要保证新行的 Select 元素 ID 是 item_2、item_3... 对应的 quantity 输入框的 onKeyup 参数要传对应数字(比如 calc(2, event)),这样 $("#item_"+i) 才能精准找到对应的元素。

4. 后端调试与容错

如果前端能正确传递参数了,后端还是拿不到数据,可以先在控制器里打印所有 POST 参数排查:

function product_det() { 
  // 先打印所有POST数据,确认参数是否传递成功
  print_r($this->input->post()); 
  
  $item=$this->input->post('item_id'); 
  $quantity=$this->input->post('quantity'); 
  $rate=$this->input->post('rate'); 
  
  // 后续业务逻辑保持不变
}

另外给模型加个容错处理,避免空参数导致查询错误:

function get_productDet($item) { 
  if(empty($item)) {
    return [];
  }
  $this->db->select('*'); 
  $this->db->from('product'); 
  $this->db->where('id',$item); 
  return $this->db->get()->row_array() ?? [];
}

按这个顺序修复后,应该能解决你遇到的大部分问题,如果还有疑问,可以打开浏览器开发者工具(F12)的 Network 标签,查看 Ajax 请求的参数是否正确传递,进一步定位问题。

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:43:17