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

選択した値を変更した後、状態選択入力を埋めるために「変更」イベントを発生させます。その後、状態選択入力の選択値を変更したいのですが、上記のコードからは状態選択の値を変更していませんが、状態を満たしています。

したがって、この関数へのトリガー後に制御が戻ってこないのではないかと考えたので、アラートを1つ入れて、ここに来るかどうかをテストします

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

これをテストした後、ここに来たというアラートが表示され、[OK] をクリックすると、状態の値が希望どおりに変化しています。

では、以前の私のアプローチの何が間違っていて、アラートを追加した後にうまく機能しているのはなぜですか? 欲しいものを手に入れるには、どのような変更を行う必要がありますか?

前もって感謝します。

4

2 に答える 2

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を作成しているときに、状態の選択された値が設定されるため、必要なものが得られました。

于 2012-09-11T12:23:11.303 に答える
0

これは、ajax呼び出しのasyncプロパティと関係があります。推奨されていませんが、falseに設定すると、正常に機能するはずです。または、代わりにコールバック関数の使用方法を学ぶ必要があります。

于 2012-09-11T12:25:59.580 に答える