2017-06-16 124 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