Pierwszy wykryć czy przeglądarka obsługuje HTML 5 a następnie użyć coś takiego:
$('input').each(function (i, item) {
if ($(item).attr('min') !== undefined && $(item).attr('max') !== undefined) {
var select = document.createElement("SELECT");
$(select).attr('name', $(item).attr('name'));
$(select).attr('id', $(item).attr('id'));
$(select).attr('disabled', $(item).attr('disabled'));
var step = 1;
if ($(item).attr('step') !== undefined) {
step = parseFloat($(item).attr('step'));
}
var min = parseFloat($(item).attr('min'));
var max = parseFloat($(item).attr('max'));
var selectedValue = $(item).attr('value');
for (var x = min; x <= max; x = x + step) {
var option = document.createElement("OPTION");
$(option).text(x).val(x);
if (x == selectedValue) { $(option).attr('selected', 'selected'); }
$(select).append(option);
};
$(item).after(select);
$(item).remove();
}
});
Ponieważ nie można użyć przełącznika input[type=range]
musiałem iść z podejściem $(item).attr('min') && $(item).attr('min')
, będzie to trochę dziwne jeśli posiadasz inne typy kontrolek wejściowych z tymi dwoma atrybutami.
Podoba mi się. Być może coś w rodzaju 'jQuery.support.rangeInput = ((jQuery.browser.safari) || (jQuery.browser.opera && jQuery.browser.version> = 2.0))', aby sprawdzić obsługę wprowadzania zakresu? –
Dzięki za dopracowanie kodu :) –
Wolałbym stopniowe ulepszanie do pełnej wdzięku degradacji, ponieważ jest możliwe, że natrafiłbym na przeglądarkę, która nie obsługuje '' ani też nie ma włączonej Javascript, więc dane wejściowe nigdy się nie nawrócą. Mimo to przynajmniej odpowiada na pytanie. –