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

使用name属性实现自动填充:AJAX success函数赋值失效问题

问题解决:下拉选择后AJAX回调无法填充输入框

核心问题是AJAX回调函数里的this上下文发生了变化,不再指向触发change事件的<select>元素,导致无法定位到对应的.body-media容器和输入框。

修复步骤:

  1. 提前保存当前元素的引用
    在AJAX调用前,把$(this)赋值给一个变量,比如$this,这样在回调里就能正常访问原元素:
$(document).on('change', '[name="item_media[]"]', function(){
    var itemID = $(this).val();
    var itemType = 1;
    // 保存当前元素的引用
    var $this = $(this);

    if(itemID){
        $.ajax({
            type:'POST',
            url:'?syspath=ajax&controller=ajax&action=getActItemDose',
            data: { 'itemId': itemID, 'itemType': itemType },
            success:function(data){
                var object = JSON.parse(data);
                var value = object.itemValue;
                var unit = object.itemUnit;
        
                // 使用提前保存的$this代替$(this)
                $this.parents('.body-media').find('[name="value_media[]"]').val(value);
                $this.parents('.body-media').find('[name="unit_media[]"]').val(unit);  
            }
        });
    }else{
        $(this).parents('.body-media').find('[name="value_media[]"]').val(0);
        $(this).parents('.body-media').find('[name="unit_media[]"]').val();
    }
});
  1. 额外注意:下拉框的unit值匹配
    确保AJAX返回的itemUnit是对应<select name="unit_media[]">中option的value属性值(比如2、3、7),而不是显示文本(g、ml、unit)。如果返回的是文本,需要调整后端返回值,或者在前端做映射:
// 示例:如果返回的是文本,手动映射到value
var unitMap = {
    'g': '2',
    'ml': '3',
    'unit': '7'
};
var unitValue = unitMap[object.itemUnit];
$this.parents('.body-media').find('[name="unit_media[]"]').val(unitValue);
  1. 可选:使用箭头函数绑定上下文
    如果你的项目支持ES6,可以用箭头函数作为success回调,箭头函数会继承外部的this上下文:
success:(data) => {
    var object = JSON.parse(data);
    var value = object.itemValue;
    var unit = object.itemUnit;

    $(this).parents('.body-media').find('[name="value_media[]"]').val(value);
    $(this).parents('.body-media').find('[name="unit_media[]"]').val(unit);  
}

验证要点:

  • 打开浏览器控制台,确认AJAX返回的data格式正确,没有语法错误
  • 检查object.itemValue和object.itemUnit是否能正确获取到值
  • 确保$this.parents('.body-media')能正确定位到容器元素

内容的提问来源于stack exchange,提问作者Muhammad Faiz Abdullah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:35:19