Как настроить горизонтальные радиокнопки jQuery-mobile
Нашему клиенту нужен нестандартный стиль переключателей для jQuery-mobile. На самом деле это очень похоже на стандартный дизайн кнопок-переключателей jQuery-mobile в горизонтальном режиме. Например, jQuery-mobile определяет горизонтальный переключатель как
<fieldset data-role="controlgroup" data-type="horizontal">
<legend>I like to buy and wear trendy must-haves</legend>
<input type="radio" name="radio-choice" id="radio-choice-1" value="choice-1" checked="checked" />
<label for="radio-choice-1">1</label>
<input type="radio" name="radio-choice" id="radio-choice-2" value="choice-2" />
<label for="radio-choice-2">2</label>
<input type="radio" name="radio-choice" id="radio-choice-3" value="choice-3" />
<label for="radio-choice-3">3</label>
<input type="radio" name="radio-choice" id="radio-choice-4" value="choice-4" />
<label for="radio-choice-4">4</label>
<input type="radio" name="radio-choice" id="radio-choice-5" value="choice-5" />
<label for="radio-choice-5">5</label>
</fieldset>
Кроме того, наш клиент хочет отобразить переключатель по умолчанию под lablel
, Например, следующее изображение
Я хотел бы знать, позволяет ли jQuery-mobile отображать переключатели по умолчанию? Если да, можете ли вы привести пример?
Или мы должны настроить это?
3 ответа
Решение
Во-первых, это невозможно сделать с помощью конфигурации jQM. Это должно быть создано вручную через jquery (как любой другой виджет jQM, включая fieldset).
Я создал рабочий пример для вас: http://jsfiddle.net/Gajotres/779Kn/
Вам нужно всего лишь сделать еще одну вещь, я не хотел беспокоиться о пользовательских изображениях, поэтому я использую изображения, созданные для моего другого примера: /questions/45880570/obedinit-flazhok-s-jquery-mobilnyij-prosmotr-spiska/45880605#45880605
Вот необходимый javascript:
$(document).on('pagebeforeshow', '#index', function(){
$('<div>').addClass('checkBox').appendTo('fieldset div div.ui-radio label');
$('input[type="radio"]').each(function(){
($(this).is(':checked')) ? $(this).next().find(".checkBox").addClass('checked') : $(this).next().find(".checkBox").addClass('not-checked');
});
$(document).on('click', '.ui-radio', function(){
$('input[type="radio"]').each(function(){
$(this).next().find(".checkBox").addClass('not-checked').removeClass('checked');
});
if($(this).find('input[type="radio"]').is(':checked')){
$(this).find('label div.checkBox').removeClass('checked').addClass('not-checked');
$(this).find('input[type="radio"]').attr('checked' , false);
} else {
$(this).find('label div.checkBox').removeClass('not-checked').addClass('checked');
$(this).find('input[type="radio"]').attr('checked' , true);
}
});
});
Вот CSS:
.checkBox{
width: 18px;
height: 18px;
background: #d9d9d9;
border-radius: 3px;
margin: 0 auto;
margin-bottom: 5px;
}
.not-checked, .checked {
background-image: url("http://www.fajrunt.org/icons-18-white.png");
background-repeat: no-repeat;
}
.not-checked {
background-position: -18px 0;
background-color:#d9d9d9;
}
.checked {
background-position: -720px 0;
background-color:#6294bc;
}
Если вы можете подождать несколько часов, я обновлю изображение, я не могу сделать это из моего текущего местоположения.
Финальные заметки
Если вы хотите узнать больше о том, как настроить страницу и виджеты jQuery Mobile, ознакомьтесь с этой статьей. Он содержит множество рабочих примеров, в том числе почему важно для jQuery Mobile.
Нет CSS или Javascript необходимо; вопрос в том, какие элементы и классы вы используете, например:
<div id="test_content" class="ui-content" data-role="main" data-theme="b">
<fieldset class="ui-controlgroup ui-corner-all">
<div class="ui-grid-b ui-controlgroup-controls" style="width: 560px;">
<div class="ui-block-a">
<input name="invoicing_filter_type" id="invoicing_filter_tobeinvoiced"
value="1|4" type="radio" data-mini="true" data-iconpos="bottom">
<label for="invoicing_filter_tobeinvoiced">To be invoiced</label>
</div>
<div class="ui-block-b">
<input name="invoicing_filter_type" id="invoicing_filter_pending"
value="9|5" type="radio" data-mini="true" data-iconpos="bottom">
<label for="invoicing_filter_pending">Invoices pending</label>
</div>
<div class="ui-block-b">
<input name="invoicing_filter_type" id="invoicing_filter_tobereleased"
value="9|6" type="radio" data-mini="true" data-iconpos="bottom">
<label for="invoicing_filter_tobereleased">Invoices to be released</label>
</div>
</div>
</fieldset>
</div>
Обратите внимание, что роль данных здесь НЕ используется. Соответствующая скрипка
Это то, что вы ищите
Использование CSS
.myclass2 {
background-color: yellow;
float: left;
margin-top: 11px;
}
.myclass {
background-color: yellow;
float: left;
left: 13px;
margin-top: 26px;
padding-left: 22px;
position: relative;
top: 10px;
}