2017-06-16 92 views
0

这听起来很简单...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();  
}); 

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

甚至可以这样做,如果是这样,如何?

预先感谢您。

+0

您没有将任何参数传递给$('messageModal')代码块中的InitializeSelect()函数。这是一个错字吗? – l0ul0u

回答

1

你可以(或至少不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不带参数时uriadapt的值存储“中的” <select>data(...)和使用这些你将不得不打电话initializeSelect()通过它所需的<select>

initializeSelect($("commoditySelect")); 

example on jsfiddle