我有一个jquery回发,在得到JSON的回复之后,我正在改变输入类型的值,选择像这样
$('#new-address select[name=\'country_id\']').val(data['country_id']).trigger('change');
$('#new-address select[name=\'zone_id\']').val(data['zone_id']);
并且在更改所选值之后我正在触发事件'change'来填充状态选择输入,之后我想更改状态选择输入的选定值但是从上面的代码它不会改变状态选择的值但它是填补国家。
所以我认为可能是控制器在触发此功能后没有返回,所以测试我发出一个警告,看看它是否会像这样来到这里
$('#new-address select[name=\'country_id\']').val(data['country_id']).trigger('change');
alert('came here');
$('#new-address select[name=\'zone_id\']').val(data['zone_id']);
经过测试后,我得到警告说来到这里,点击“确定”后,状态值正在改变。
那么我的方法之前有什么问题,为什么在添加警报后它的工作正常?我应该做些什么改变才能得到我想要的东西?
提前致谢。
答案 0 :(得分:0)
我不确定这是正确还是错误的方式,但它对我有用。正如@abhi所建议的那样,javascript按顺序运行所以我将代码更改为:
$('#new-address select[name=\'country_id\']').val(data['country_id']);
var selectedstate = data['zone_id'];
$.get(
"index.php?route=common/home/country&token=<?php echo $token;?>",
{ 'country_id': data['country_id'] },
function(json) {
html = '<option value=""><?php echo $text_select; ?></option>';
if (json['zone'] != '') {
for (i = 0; i < json['zone'].length; i++) {
html += '<option value="' + json['zone'][i]['zone_id'] + '"';
if (parseInt(json['zone'][i]['zone_id']) == parseInt(selectedstate)) {
html += ' selected="selected"';
}
html += '>' + json['zone'][i]['name'] + '</option>';
}
} else {
html += '<option value="0" selected="selected"><?php echo $text_none; ?></option>';
}
$('#new-address select[name=\'zone_id\']').html(html);
},
'json'
);
通过这样做,我得到了我想要的东西,因为在为状态选择制作html时设置了所选的状态值。
答案 1 :(得分:0)
这与您的ajax调用的async属性有关。不推荐,但你可以设置为false,它应该工作正常。或者你真的需要学习如何使用call back functions来代替!