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

如何用JavaScript获取CGridView表格td内输入框的文本值?

解决CGridView中获取输入框值的问题

看起来你遇到的核心问题是:CGridView默认的单元格内容获取逻辑针对的是渲染时的静态文本,但输入框是动态交互的DOM元素,直接取单元格自然拿不到输入后的动态值。下面分前端JS获取和后端提交获取两种场景给你解决方案:

一、前端JS获取选中行的输入框值

你设置了selectableRows => 2支持多选,默认的getSelectedRows()只能拿到行ID,需要自己遍历选中行,定位输入框元素提取value:

假设你的输入框列是这样定义的(给输入框加统一class方便定位):

array(
    'header' => '自定义输入值',
    'type' => 'raw', // 必须设为raw才能渲染HTML输入框
    'value' => function($data) {
        // 给输入框加class="grid-input",同时设置合理的name属性(后端提交会用到)
        return CHtml::textField(
            "UpgradeRule[{$data->primaryKey}][custom_value]",
            $data->custom_value,
            array('class' => 'grid-input')
        );
    },
),

然后写JS代码获取选中行的输入值:

// 获取CGridView实例的选中行ID数组
var selectedRowIds = $('#oc-list-upgradeRule').yiiGridView('getSelectedRows');
var inputData = [];

// 遍历每个选中行,提取输入框值
$.each(selectedRowIds, function(idx, rowId) {
    // 通过行ID定位到对应的tr,再找到里面的输入框
    var inputVal = $('#oc-list-upgradeRule tr#row' + rowId + ' .grid-input').val();
    inputData.push({
        row_id: rowId,
        input_value: inputVal
    });
});

// 现在inputData里就存了所有选中行的输入值,可用于AJAX提交等后续操作
console.log(inputData);

二、后端表单提交获取输入值

如果是通过表单提交整个页面,关键是给输入框设置正确的name属性,让Yii能正确解析提交的数据。

比如上面代码里的name="UpgradeRule[{$data->primaryKey}][custom_value]",提交后控制器可以这样处理:

public function actionSaveUpgradeRules() {
    if(Yii::app()->request->isPostRequest) {
        // 获取所有输入框提交的数据
        $postData = Yii::app()->request->getPost('UpgradeRule', []);
        
        foreach($postData as $ruleId => $data) {
            $inputValue = $data['custom_value'];
            // 找到对应的模型并更新
            $model = UpgradeRule::model()->findByPk($ruleId);
            if($model) {
                $model->custom_value = $inputValue;
                $model->save(false); // 根据需求调整验证规则,false代表跳过验证
            }
        }
        
        $this->redirect(['index']); // 跳转回列表页
    }
}

关键注意点

  • 输入框列必须设置type => 'raw',否则CGridView会把HTML转义成文本,输入框无法正常渲染。
  • 前端定位输入框时,尽量用class或者明确的选择器,避免依赖DOM结构变化导致失效。
  • 后端获取时,确保模型的属性和输入框name里的字段名对应,这样可以直接用模型赋值,不用手动处理数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:09:56