在jQuery中刷新下拉选择而不刷新页面

时间:2017-06-16 16:20:22

标签: javascript jquery

听起来很简单。

我有这个在加载页面时运行的函数:

 function initializeSelect($select, uri, adapt){        
   $.getJSON( uri, function( data ) {
   $select.empty().append($('<option>'));       
   $.each(data, function(index, item) {
     var model = adapt(item);
     var $option = $('<option>');
     $option.get(0).selected = model.selected;
     $option.attr('value', model.value)
       .text(model.text)
       .appendTo($select);      
     });
   });
 });

这里调用它并为下拉选择生成OPTIONS:

 initializeSelect($('#commoditySelect'), 'api/sel_keyCommodities.php', function (item) { 
   return {
     value: item.KEY_COMMODITY,
     text: item.KEY_COMMODITY
   }
 });

我需要能够在模式窗口关闭时刷新下拉选项而不刷新页面:

 $('#messageModal').on('hidden.bs.modal', function()
 {
    // I tried this to no avail
    initializeSelect();       
 });

这样,下拉选择将重新运行,可能会有一个新的选择,可能已添加或未添加。

可以这样做,如果是,怎么做?

1 个答案:

答案 0 :(得分:1)

您可以将uriadapt的值存储在<select>data(...)中,并在不带参数的情况下调用initializeSelect时使用这些值(或者至少没有uriadapt

function initializeSelect($select, uri, adapt) {
  if (typeof uri !== "string") {
    uri = select.data("uri");
    adapt = select.data("adapt");
  } else {
    select.data({
      "uri": uri,
      "adapt": adapt
    });
  }

  $.getJSON(uri, function(data) {
    $select.empty().append("<option>");

    $.each(data, function(index, item) {
      var model = adapt(item);

      $("<option>")
        .val(model.value)
        .text(model.text)
        .prop("selected", model.selected)
        .appendTo($select);
    });
  });
}

要“刷新”<select>,您必须致电initializeSelect()将所需的<select>

传递给他人
initializeSelect($("commoditySelect"));

example on jsfiddle