1

我的表单有一个询问用户所在国家/地区的列表框,但我只想通过 AJAX 调用填充列表框,如果该框尚未显示用户所在的国家/地区。最初,列表框只包含一个国家 - 从服务器上的 ip-to-country 查找返回的国家。

似乎列表框的默认操作发生在我的事件操作之前。我希望我的操作首先发生,这样当用户单击列表框时,该框会在框打开之前预先填充从服务器上拉下来的国家/地区。

感谢您的任何建议。

$().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>

4

3 回答 3

1

通过选择单击事件,您将无法享受跨浏览器的乐趣。所有人都只支持更改事件,因此您需要重新考虑。

一种选择是使用显示 ip 国家/地区的标签,如果用户想要更改它,他们单击标签旁边的按钮,然后创建并填充选择并替换标签。

于 2009-07-24T12:43:25.557 回答
1

线

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

是什么推迟了 Ajax 调用,直到您单击该框。尝试将其更改为简单

$(function(){

或者只是删除该行及其右大括号。

于 2009-07-24T12:48:46.057 回答
1

如果你有类似的东西会更好:

县:西班牙变化

当他们单击更改时,将国家名称替换为所有国家/地区的下拉框。

于 2009-07-24T12:52:15.683 回答