Как мне использовать флажок jquery-ui в виджете?

#javascript #jquery #jquery-ui

#javascript #jquery #jquery-ui

Вопрос:

Я использую флажок jquery-ui в контейнере, в котором есть класс ui-widget-content. Это приводит к тому, что css-правило «.ui-widget-content .ui-state-hover», которое определяет свойство background, переопределяет правило .ui-icon-check, которое определяет правильное положение фона для изображения флажка. Я считаю, что это потому, что он более конкретный.

В результате флажок в виджете показывает неправильное изображение. Как мне с этим справиться?

Вот пример jsfiddle. Во втором div, где у меня есть класс ui-widget-content, вы можете видеть, что отмеченное изображение неверно.

 <div class="ui-widget-content">
<label for="cb3">Test 1</label>
<input type="checkbox" id="cb3" class="toggle"/>
<label for="cb4">Test 2</label>
<input type="checkbox" id="cb4" class="toggle" checked="checked"/>
</div>
  

Обратите внимание, что я не могу изменить родительский div. Я работаю в диалоговом окне, для которого требуется этот класс.

Я удивлен, что не могу найти никого, кто жаловался бы на это. Я не уверен, чего мне не хватает.

Ответ №1:

Таким .ui-icon-check образом, класс перезаписывается более поздним стилем. Вы можете просто записать его обратно.

Один пример: https://jsfiddle.net/Twisty/ewabcy3g/2 / (Исправлено для пустого)

CSS

 .ui-widget-content label span.ui-icon-check {
  background-position: -64px -144px;
}
.ui-widget-content label span.ui-icon-blank {
  background-position: 16px 16px;
}
  

Другой пример: https://jsfiddle.net/Twisty/ewabcy3g/1 /

jQuery

 $('.nonwidget,.ui-widget-content').controlgroup({
  "direction": "vertical"
}).find(".ui-icon-check").css("background-position", "-64px -144px");
  

Надеюсь, это поможет.

Обновить

Нашел кое-что интересное, все еще немного хака, но, похоже, это помогает:

https://jsfiddle.net/Twisty/ewabcy3g/3/

Когда я удалил атрибут checked и установил его с помощью jQuery, вот так:

 $('.toggle').checkboxradio();
$("#cb4").attr("checked", true);
$('.nonwidget,.ui-widget-content').controlgroup({
  "direction": "vertical"
});
  

Я мог бы удалить CSS-хаки. Я обнаружил, что, вернув позиционирование CSS, он все еще считывал фоновое изображение при наведении курсора и не сохранял правильный стиль.

Затем я попытался добавить checked="checked" обратно в HTML, и он снова облажался.

Комментарии:

1. Я думаю, это немного помогает. Это похоже на полный взлом ошибки jquery-ui. Ваши примеры также не работают полностью, потому что, когда вы снимаете флажок, он снова запутывается. Поэтому мне пришлось бы переопределить хотя бы ui-icon-check и ui-icon-blank.

2. @Backslider второй пример работает лучше. Я понимаю, что вы говорите о первом примере. Что я вижу, так это то, что .ui-widget-content .ui-state-hover класс сбрасывает значение 50%, 50% .

3. На самом деле я устанавливаю свойство checked с помощью кода. Я думаю, разница в том, что я устанавливал его перед вызовом checkboxradio() . Я думаю, что если я перемещу его в after , это приведет к тому, что он не будет включать класс наведения, что заставляет стили оставаться в правильном порядке.