加载选项框后,jQuery在选项框中设置选定值

加载选项框后,jQuery在选项框中设置选定值,jquery,Jquery,我想根据隐藏字段预设selectbox的值。在表单中检测到错误后,我需要使用此选项,以避免用户必须自己再次设置值。 我通过设置隐藏字段服务器端的值来实现这一点。 我遇到的问题似乎是,在我尝试设置所选值时,选择框尚未完成。 有人知道如何解决这个问题(可能是以一种非常不同的方式?) $(函数(){ //如果选择了具有州的国家/地区,此功能将加载具有州的州选择框 $(“选择国家”)。更改(功能(){ $.getJSON(“/ajax/experience/getstates.php?idCountr

我想根据隐藏字段预设selectbox的值。在表单中检测到错误后,我需要使用此选项,以避免用户必须自己再次设置值。 我通过设置隐藏字段服务器端的值来实现这一点。 我遇到的问题似乎是,在我尝试设置所选值时,选择框尚未完成。 有人知道如何解决这个问题(可能是以一种非常不同的方式?)


$(函数(){
//如果选择了具有州的国家/地区,此功能将加载具有州的州选择框
$(“选择国家”)。更改(功能(){
$.getJSON(“/ajax/experience/getstates.php?idCountry=“+$(“选择#国家”).val(),函数(j){
var选项=“”;
$。每个(j,函数(键,值){
选项+=''+值+'';
});
$(“选择#状态”).html(选项);
});
});
});
$(文档).ready(函数(){
//预设“就绪”页上的“状态选择”框
$('select#countries').change();
//设置状态选择框的选定值
var foo=$('#statepreset').val();
$(“选择#状态选项[value=“+foo+”]”)attr('selected','selected');
});

您可以将预选代码添加到getJson的回调中

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>

<script type="text/javascript" charset="utf-8">
$(function(){
    // this functions loads the state select box with states if a country with states is selected
$("select#countries").change(function(){
  $.getJSON("/ajax/exhibition/getstates.php?idCountry="+$("select#countries").val(), function(j){
        var options = '';
        $.each(j, function(key, value){
            options += '<option value="' + key + '">' + value + '</option>';
        });
        $("select#state").html(options);
        var foo = $('#statepreset').val();
        $("select#state option[value="+foo+"]").attr('selected', 'selected');
    });
});
});

$(函数(){
//如果选择了具有州的国家/地区,此功能将加载具有州的州选择框
$(“选择国家”)。更改(功能(){
$.getJSON(“/ajax/experience/getstates.php?idCountry=“+$(“选择#国家”).val(),函数(j){
var选项=“”;
$。每个(j,函数(键,值){
选项+=''+值+'';
});
$(“选择#状态”).html(选项);
var foo=$('#statepreset').val();
$(“选择#状态选项[value=“+foo+”]”)attr('selected','selected');
});
});
});

我建议采用这种方法:

function initSelect(defaultVal) {
    $("select#countries").change(function(){
        $.getJSON("/ajax/exhibition/getstates.php?idCountry="+$("select#countries").val(),     function(j){
            var options = '';
            $.each(j, function(key, value){
                options += '<option value="' + key + '">' + value + '</option>';
            });
            $("select#state").html(options);
            $("select#state option[value="+defaultVal+"]").attr('selected', 'selected');
        });
    }).change();
}


$(document).ready(function(){
    initSelect($('#statepreset').val());
});
函数initSelect(defaultVal){
$(“选择国家”)。更改(功能(){
$.getJSON(“/ajax/experience/getstates.php?idCountry=“+$(“选择#国家”).val(),函数(j){
var选项=“”;
$。每个(j,函数(键,值){
选项+=''+值+'';
});
$(“选择#状态”).html(选项);
$(“选择#状态选项[value=“+defaultVal+”]”)attr('selected','selected');
});
}).change();
}
$(文档).ready(函数(){
initSelect($('#statepreset').val();
});

快速修复方法是将修改状态选择的代码放在回调(getJSON回调)中

$(“选择#国家”).change(函数(){
$.getJSON(“/ajax/experience/getstates.php?idCountry=“+$(“选择#国家”).val(),函数(j){
var选项=“”;
$。每个(j,函数(键,值){
选项+=''+值+'';
});
$(“选择#状态”).html(选项);
//设置状态选择框的选定值
var foo=$('#statepreset').val();
$(“选择#状态选项[value=“+foo+”]”)attr('selected','selected');
});
});

请记住,您提供给getJson调用的回调仅在服务器应答后执行。

当国家/地区发生变化时,它应该始终选择默认值还是仅在页面加载时选择默认值?好的,这似乎有效,但这也会在每次国家/地区更改时调用,因此会在每次国家/地区更改时尝试将状态列表的选定选项重置为隐藏字段中的选项。我希望它只在加载页面上执行。使用这段代码,似乎是对我的一次很好的更干净的重写,但请参阅我的注释以获得来自harpax的答案。我认为这是个小问题,但我觉得我应该以另一种方式去解决整个问题。
function initSelect(defaultVal) {
    $("select#countries").change(function(){
        $.getJSON("/ajax/exhibition/getstates.php?idCountry="+$("select#countries").val(),     function(j){
            var options = '';
            $.each(j, function(key, value){
                options += '<option value="' + key + '">' + value + '</option>';
            });
            $("select#state").html(options);
            $("select#state option[value="+defaultVal+"]").attr('selected', 'selected');
        });
    }).change();
}


$(document).ready(function(){
    initSelect($('#statepreset').val());
});
$("select#countries").change(function(){
  $.getJSON("/ajax/exhibition/getstates.php?idCountry="+$("select#countries").val(), function(j){
        var options = '';
        $.each(j, function(key, value){
            options += '<option value="' + key + '">' + value + '</option>';
        });
    $("select#state").html(options);

    // set the selected value of the state select box
    var foo = $('#statepreset').val();
    $("select#state option[value="+foo+"]").attr('selected', 'selected');
    });
});