Автоматично попълване на списъчно поле с имена на държави с помощта на jquery и събитие за щракване на полето

Моят формуляр има списъчно поле, което пита за държавата на потребителя, но искам само да попълня списъчното поле чрез AJAX извикване, ако полето все още не показва държавата на потребителя. Първоначално списъчното поле съдържа само една държава - държавата, върната от търсене на ip към държава на сървъра.

Изглежда, че действието по подразбиране на списъчното поле се случва преди моето действие за събитие. Бих искал моето действие да се извърши първо, така че когато потребителят щракне върху списъчното поле, полето да бъде предварително попълнено с държавите, изтеглени от сървъра, преди полето да се отвори.

Благодаря за всякакви предложения.

$().ready(function() {
  $('select#selCountry').one('click', function() {
    var selCountry = $('select#selCountry');
    var selected = $(selCountry).val();
    selCountry.html('<option value="">Loading...</option>');
    $.getJSON('/AjaxHelpers/CountryList', function(data) {
      if (data.length) {
        var options = '';
        for (var i = 0; i < data.length; i++) {
          var key = data[i].Key;
          var val = data[i].Value;
          options += '<option value="' + key + '"';
          if (key == selected) {
            options += ' selected="selected"';
          }
          options += '>' + val + '</option>';
        }
        selCountry.html(options);
      }
      else {
        selCountry.html('<option value="">Failed.</option>');
      }
    });
  });
});

HTML:

<div>
  <select id="selCountry" name="CountryCode"><option value="GB">United Kingdom</option>


person Robert Northen    schedule 24.07.2009    source източник
comment
какво е действието по подразбиране. какво точно се случва с този код, което не искате да се случи?   -  person mkoryak    schedule 24.07.2009


Отговори (3)


Няма да имате никаква радост от кръстосания браузър със събитието select click. Само събитието за промяна се поддържа от всички, следователно трябва да преосмислите.

Една от възможностите би била да се използва етикет, който показва IP държавата и ако потребителят иска да го промени, той щраква върху бутон до етикета, който след това създава и попълва избрано и замества етикета.

person redsquare    schedule 24.07.2009

линията

$('select#selCountry').one('click', function() {

е това, което отлага извикването на Ajax, докато не щракнете върху квадратчето. Опитайте да го промените на просто

$(function(){

или просто премахване на тази линия и затварящата скоба.

person Christopher Tokar    schedule 24.07.2009

Би било много по-добре, ако просто имате нещо като:

Област: Испания промяна

Когато щракнат върху промяна, заменете името на държавата с падащо поле с всички държави.

person Jason Christa    schedule 24.07.2009
comment
errr не това ли казах! - person redsquare; 24.07.2009