0

我有一个 jquery 回发,在得到 JSON 的回复后,我正在更改输入类型的值,如下所示

$('#new-address select[name=\'country_id\']').val(data['country_id']).trigger('change');
$('#new-address select[name=\'zone_id\']').val(data['zone_id']);

在更改所选值之后,我触发了一个事件“更改”以填充状态选择输入,之后我想更改状态选择输入的所选值,但是从上面的代码中它不会改变状态选择的值,而是填充状态。

所以我想可能是控制在触发这个功能后没有回来,所以为了测试我放了一个警报,看看它是否像这样来到这里

$('#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']);

在对此进行测试后,我收到警报说来到这里并单击确定后,状态的值正在按照我的意愿发生变化。

那么我之前的方法有什么问题,为什么在添加警报后它可以正常工作?我应该做哪些改变才能得到我想要的?

提前致谢。

4

2 回答 2

0

I am not sure it's correct or wrong way but it worked for me. As suggested by @abhi that javascript runs sequentially so I changed my code to this:

$('#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'
);

by doing this I got what I wanted because selected value of state is set while it's making html for state select.

于 2012-09-11T12:23:11.303 回答
0

这与您的 ajax 调用的 async 属性有关。不建议这样做,但您可以将其设置为 false,它应该可以正常工作。或者你真的需要学习如何使用回调函数

于 2012-09-11T12:25:59.580 回答