2010-03-18 5 views
1

Я хочу задать значение selectbox на основе скрытого поля. Мне нужно это после того, как ошибка была обнаружена в форме, чтобы пользователь не смог снова установить значение. Я делаю это, устанавливая значение скрытой области сервера. Проблема, по-видимому, в том, что окно выбора еще не выполнено, когда я пытаюсь установить выбранное значение. Каждый знает, как решить эту проблемуjQuery установить выбранное значение в поле выбора после загрузки поля

<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); 
    }); 
}); 

}); 
$(document).ready(function(){ 
// preset the state select box on page ready 
$('select#countries').change(); 

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


}); 
</script> 
+0

Следует ли всегда выбирать значение по умолчанию при изменении страны или только при загрузке страницы? –

ответ

2

Я хотел бы предложить этот подход (возможно, совсем по-другому?):

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()); 
}); 
+0

использовал этот код, кажется хорошим чистым переписыванием, но см. Мой комментарий для ответа от harpax. Я считаю, что это небольшая проблема, но я чувствую, что мне нужно решить всю проблему по-другому – Maarten

0

Вы можете добавить предварительного выбора-кода обратного вызова из 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'); 
    }); 
}); 
}); 
+0

ОК, похоже, это работает, но это также вызвано каждой сменой страны и, таким образом, попытается сбросить выбранный вариант списка состояний в тот, который был скрыт при каждом изменении страны. Я бы хотел, чтобы он исполнялся только на странице загрузки. – Maarten

1

быстро исправить это поместить код, который изменяет выбор состояния, внутри обратного вызова (внутри обратного вызова getJSON)

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

Помните, что обратный вызов, который вы передаете на вызов getJson, выполняется только после ответа сервера.

Смежные вопросы