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

能否在Ajax中使用动态变量?附视图代码示例

当然可以在Ajax中使用动态变量!

结合你给出的CodeIgniter视图代码,我来给你一步步演示怎么操作:

1. 获取动态生成的元素值

你的输入框ID是jenis_anggaran_<?= $index ?>这种带动态索引的,在JavaScript里可以通过多种方式获取它们的值:

方式一:遍历所有目标元素

如果要批量处理这类输入框,可以用类选择器遍历:

// 遍历所有带required类的表单输入框
$('.required.form-control').each(function() {
    // 获取动态生成的ID(比如jenis_anggaran_0)
    var dynamicId = $(this).attr('id');
    // 获取输入框的当前值
    var dynamicValue = $(this).val();
    
    // 这里就可以把dynamicId和dynamicValue作为参数传入Ajax请求了
    console.log('处理元素:', dynamicId, '值:', dynamicValue);
});

方式二:通过动态索引定位单个元素

如果知道具体的索引值,直接拼接ID选择器即可:

// 假设你有一个动态的index变量(比如从按钮的data属性获取)
var targetIndex = 2;
var targetValue = $('#jenis_anggaran_' + targetIndex).val();

2. 在Ajax请求中传递动态参数

不管是单个还是多个动态值,都可以轻松传入Ajax请求:

比如给每个行加一个提交按钮,绑定点击事件传递对应索引的参数:

// 视图里给按钮添加data-index属性存储动态索引
<div class="col-sm-6 col-xs-12 value">
    <?= form_input(array(
        'name' => 'jenis_anggaran_'.$index, 
        'id' => 'jenis_anggaran_'.$index, 
        'readonly' => 'readonly', 
        'class' => 'required form-control input-sm', 
        'value' => $this->input->post('jenis_anggaran_'.$index), 
        'title' => 'Ketik satuan disini', 
        'rel' => 'Satuan', 
        'style' => 'width : 100%;', 
        'placeholder' => 'Satuan'
    )) ?>
    <button class="btn-submit-row" data-index="<?= $index ?>">提交当前行</button>
</div>

对应的JavaScript代码:

// 绑定按钮点击事件
$('.btn-submit-row').click(function() {
    // 从按钮的data属性获取动态索引
    var index = $(this).data('index');
    // 获取对应输入框的值
    var inputValue = $('#jenis_anggaran_' + index).val();

    // 发起Ajax请求
    $.ajax({
        url: '/your-controller/your-method', // 替换成你的CI控制器方法地址
        type: 'POST',
        data: {
            jenis_anggaran: inputValue,
            row_index: index // 传递动态索引给后端
        },
        success: function(response) {
            // 请求成功后的处理逻辑
            alert('提交成功!返回结果:' + JSON.stringify(response));
        },
        error: function(xhr, status, error) {
            // 请求失败的处理
            console.error('提交出错:', error);
        }
    });
});

3. 后端(CodeIgniter)接收动态参数

在你的控制器方法里,直接用$this->input->post()就能拿到传递的动态参数:

public function your_method() {
    $rowIndex = $this->input->post('row_index');
    $jenisAnggaran = $this->input->post('jenis_anggaran');

    // 这里写你的业务逻辑,比如存入数据库或者返回处理结果
    $response = array(
        'status' => 'success',
        'message' => '收到第' . $rowIndex . '行的值:' . $jenisAnggaran
    );

    echo json_encode($response);
}

4. 处理动态新增的元素

如果你的输入框是通过JavaScript动态新增的(比如点击“添加行”按钮生成),那要用事件委托来绑定事件,确保新生成的元素也能触发Ajax:

// 事件委托:监听所有ID以jenis_anggaran_开头的输入框的change事件
$(document).on('change', '[id^="jenis_anggaran_"]', function() {
    var dynamicId = $(this).attr('id');
    var dynamicValue = $(this).val();
    var index = dynamicId.replace('jenis_anggaran_', ''); // 从ID里提取索引

    // 这里可以直接发起Ajax请求,比如实时同步值到后端
    $.ajax({
        url: '/your-controller/sync-value',
        type: 'POST',
        data: {
            index: index,
            value: dynamicValue
        },
        success: function(res) {
            console.log('同步成功:', res);
        }
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:49