2015-11-13 83 views
0

我有一个选择栏,#parentCatSelect其值可通过功能acLoadParentCategories通过AJAX/PHP获取生成的页面加载后。加载通过AJAX选择选项,然后设置一个值

功能需要使用两个独立的方法,首先创建一个新的部分(其中正常工作),其次是更新的一部分。当用户更新零件时,应通过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。我这样做只是为了看看它是否会工作,仍然没有骰子。)

+0

如果你把'的jQuery( '#parentCatSelect选项[值= “1”]')ATTR( '选择',真);''以上的回调()'它工作正常吗? –

+0

对不起把'回调();''的jQuery(“#parentCatSelect”)后追加(HTML);' –

+0

因为AJAX完成之前,你的回调将被称为..让我知道,如果它解决您的问题.. –

回答

2

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

  1. 使你的$.ajax同步,我不建议。
  2. 呼叫后jQuery('#parentCatSelect').append(html);(的$.post成功块)回调即你的DOM被填入值之后。

希望它可以帮助..