我有一个选择框,其内容和本身随ajax更改。 我想用ajax更改内容,加载后,我想将所选的选项更改为“test_type”。 当我使用ajax获取数据并使用新的selectbox更改#type_select_div的内容时,它会被加载,我可以看到选项,但是,jquery不能更改所选的选项。 (你会在下面看到test2) 但是,如果我给出内容(与ajax响应完全相同),它不是使用ajax,而是完美地运行。 (你会看到下面的test1)
我找不到我做错了什么。
HTML部分:
<div id="type_select_div">
<select id="formElementTypeName" name="formElementTypeName" class="form-control ">
</select>
</div>
<button onclick="loadAndChange()">load and change</button>
javascript部分:
function loadTypes(){
/* test1: works */
var msg='<select class="form-control" name="formElementTypeName" id="formElementTypeName">'
+'<option value="type1">type1</option>'
+'<option value="test_type">test_type</option>'
+'</select>';
$('#type_select_div').html(msg);
/* end of test1*/
/* test2: doesn't work */
$.ajax({
type: "POST",
url: "ajax_actions.php",
success: function(msg){
$('#type_select_div').html(msg);
}
});
/* end of test2 */
}
function loadAndChange(){
$.when(loadTypes()).done(function () {
$('select[name="formElementTypeName"]').find('option[value="test_type"]').attr("selected",true)
});
}
答案 0 :(得分:2)
您需要从Deferred
loadTypes()
function loadTypes(){
var msg='<select class="form-control" name="formElementTypeName" id="formElementTypeName">'
+'<option value="type1">type1</option>'
+'<option value="test_type">test_type</option>'
+'</select>';
$('#type_select_div').html(msg);
return $.ajax({
type: "POST",
url: "ajax_actions.php",
success: function(msg){
$('#type_select_div').html(msg);
}
});
}
答案 1 :(得分:2)
您需要将$.ajax
调用的结果返回给您的方法,以便jQuery知道它是一个承诺:
function loadTypes(){
return $.ajax({
type: "POST",
url: "ajax_actions.php",
success: function(msg){
$('#type_select_div').html(msg);
}
});
}
function loadAndChange(){
$.when(loadTypes()).done(function () {
$('select[name="formElementTypeName"]').find('option[value="test_type"]').attr("selected",true)
});
}