代码之家  ›  专栏  ›  技术社区  ›  Olly

在页面加载和更改时使用AJAX填充SELECT元素

  •  1
  • Olly  · 技术社区  · 16 年前

    我有一个 SELECT

    $(function() {
      function populate() {
        $.getJSON('/action/' + $(this).val(), {}, function(data, textStatus) {
          var el = $('select#two');
          el.html('');  // empty the select
          $.each(data, function(idx, jsonData) {
            el.append($('<option></option>').val(jsonData.id).html(jsonData.name));
          });
        });
      }
    
      $("select#one").change(populate);
    });
    

    getJSON 电话如下:

    $.getJSON('/action/' + $("select#one").val(), {}, function(data, textStatus) 
    

    (即,不要使用 $(this) )

    populate();
    

    虽然这样做有效,但感觉不太对劲。有人能提出更好的解决方案吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   David Hellsing    16 年前

    您可以通过添加 .trigger('change') 对您的选择器执行以下操作:

    $("select#one").change(populate).trigger('change');
    
        2
  •  0
  •   kgiannakakis    16 年前

    在我看来,最好使用服务器端代码填充第一个select。使用Ajax调用执行此操作可能会引入一个间隔,此时页面将显示,但选择框仍为空。当页面来自缓存时,这很容易发生。用户会感到困惑,可能需要再次尝试以查看出现的选项。