Подход я представляю ниже итерацию через все fieldset
элементов, и если все входы в них имеют type="radio"
, скрывает их и добавляет span
элементы (из class="buttonRadio"
) на их месте, используя текст из их соответствующих label
элементов. Он также связывает click
события с прилагаемыми span
элементов, и запускает change
события на оригинальных input
с, а также добавляет «проверил» имя-класса на щелкнутый/прикоснулись элемент, при удалении этого класса это от своих братий и сестер:
$('fieldset').each(
function() {
var legend = $(this).find('legend').text();
if ($(this).find('input').length == $(this).find('input[type="radio"]').length) {
var that = $(this),
len = that.find('input[type="radio"]').length;
for (var i = 0; i < len; i++) {
$('<span />')
.text($('label')
.eq(i).text())
.addClass('buttonRadio')
.attr('data-fromID',that.find('input:eq(' + i + ')').attr('id'))
.appendTo(that);
}
}
}).on('click','.buttonRadio',function(){
var id = $(this).attr('data-fromID');
$(this).addClass('checked').siblings().removeClass('checked');
$('#' + id).click().trigger('change');
}).find('label, input[type="radio"]').css('display','none');
При этом используется следующий CSS для стилизации этих элементов:
.buttonRadio {
background-color: #fff;
padding: 0.5em 1em;
border: 1px solid #000;
margin: 0.5em 0 0 0;
}
.buttonRadio.checked {
background-color: #ffa;
}
JS Fiddle demo.
Отредактированный внести поправки в JQuery немного:
- кэшируются на
$(this)
объект чуть раньше в этой версии,
- вспомнил использовать
legend
переменную, я назначенную в первом воплощении но забыл на самом деле использовать ... вздох.
также скрывала фактический <legend></legend>
элемент:
$('fieldset').each(
function() {
var that = $(this),
legend = that.find('legend').text();
$('<span />').text(legend).addClass('legend').appendTo(that);
if (that.find('input').length == that.find('input[type="radio"]').length) {
var len = that.find('input[type="radio"]').length;
for (var i = 0; i < len; i++) {
$('<span />')
.text($('label')
.eq(i).text())
.addClass('buttonRadio')
.attr('data-fromID',that.find('input:eq(' + i + ')').attr('id'))
.appendTo(that);
}
}
}).on('click','.buttonRadio',function(){
var id = $(this).attr('data-fromID');
$(this).addClass('checked').siblings().removeClass('checked');
$('#' + id).click().trigger('change');
}).find('label, input[type="radio"], legend').css('display','none');
JS Fiddle demo.
Ссылки:
Достаточно немного, что вы пробовали? Вы нашли что-нибудь вообще от поиска? –
Я посмотрел на http://jqueryui.com/demos/button/radio.html Он хочет, чтобы я этого хотел. Тем не менее, я открыл вопрос, чтобы знать, является ли это хорошим выбором или есть лучшие варианты. следовательно вопрос – CuriousMind