加载通过ajax选择选项,然后设置值

时间:2015-11-13 21:51:13

标签: javascript jquery ajax

我有一个选择字段#parentCatSelect,其值在页面通过函数acLoadParentCategories加载后通过AJAX / PHP生成。

该函数需要使用两种不同的方式,首先创建一个新的部分(工作正常),然后再更新一个部分。当用户更新部件时,应通过AJAX从数据库中的值加载所有表单值(包括此表单值)。除此之外,所有值都正确加载。

我不能为我的生活弄清楚为什么我的值在选择值加载后没有得到设置。

我通过ajax加载类别的功能:

var acLoadParentCategories = function( callback ) {

    var _data = {
        action: 'ac_ajax_load_parent_cats'
    };

    jQuery.post(
        the_ajax_script.ajaxurl,
        _data,
        function( response ) {

            var results = JSON.parse(response.results);
            var html = '';

            for (var i = 0; i < results.length; i++ ) {
                html += '<option value="' + results[i].cat_id + '">' + results[i].cat_name + '</option>';
            }

            jQuery('#parentCatSelect').append(html);
        }
    );

    callback();
    return;
};

我要加载它,然后正确设置val

acLoadParentCategories( function() {
    console.log('happening');
    jQuery('#parentCatSelect option[value="1"]').attr('selected', true);
});

console.log语句被正确调用,但无论我尝试什么,我都无法在生成选择框后正确设置值。我做错了什么?

(为清楚起见,我知道我手动分配值为“1”而不是动态加载ID。我这样做只是为了看它是否有效,但仍然没有骰子。)

1 个答案:

答案 0 :(得分:2)

问题是因为您在callback()之后添加了$.post函数,默认情况下是异步。所以,你的'callback()'将在ajax完成之前执行。你有两个选择

  1. 让我$.ajax同步,我不建议。
  2. jQuery('#parentCatSelect').append(html);$.post的成功块)之后调用您的回调,即在您的DOM填充值之后。
  3. 希望有所帮助......