Подтвердить что ты не робот

JQuery UI 1.8.22 с jQuery 1.8 не имеет текста в диалоговых кнопках

Я пошел проверять, будет ли недавно выпущенный jQuery 1.8 (стабильный) совместим с моим текущим проектом в разработке, и, к моему удивлению, это первое, что я увидел:

enter image description here

Для меня это неожиданность, так как я уже был обновлен до jQuery UI 1.8.22, который, согласно сообщению о выпуске, совместим с jQuery 1.8.

Функции обратного вызова вызываются согласно, но кнопки не имеют textNode, как можно видеть в инспекторе DOM:

enter image description here

Решения, которые я нашел до сих пор, следующие:

  • Вернуться к jQuery 1.7.2 (я бы хотел использовать последнюю версию jQuery на моей странице, хотя)
  • Обновление до jQuery UI 1.9.0pre (нестабильно)
  • Используйте обработчик open или вручную отредактируйте HTML-диалог, чтобы включить мой желаемый текст. Кажется, много ненужных хлопот за ошибку в их источнике.

Я что-то упустил или это реальная ошибка?

Вот скрипка, которую я использовал для демонстрации:

jsFiddle

И код для справки в будущем:

HTML

<div id="foo" title="Dialog title">Dialog text</div>

JS

$('#foo').dialog({
    buttons: {
        Yes: function() { $(this).dialog('close'); },
        No: function() { $(this).dialog('close'); }
    }
});
4b9b3361

Ответ 1

EDIT:

Здесь билет BugTracker.

Более простым решением является использование этого фрагмента после включения библиотеки jQuery:

if ( $.attrFn ) { $.attrFn.text = true; }

jsFiddle

Эта проблема должна быть исправлена ​​при выпуске jQuery UI 1.8.23. Кредиты на scott.gonzalez со страницы билета BugTracker.

EDIT: это было исправлено в UI 1.8.23.


Мое старое решение:
(используйте его, если у вас есть проблемы с вышеприведенным)

Я сделал временное исправление для этой проблемы (пока новая стабильная версия UI или ядра не будет выпущена).

Там ошибка с jQuery 1.8, взаимодействующая с jQuery UI 1.8.22, которая хранит текст в родительском атрибуте button text вместо создания textNode внутри span.ui-button-text:

enter image description here

Используйте этот фрагмент после инициализации jQuery UI dialog или любого другого интерфейса, который имеет ошибку этого пользовательского интерфейса:

//iterate through all UI button text spans in the document
$('.ui-button-text').each(function() {
    var $this = $(this);
    if ($this.text() == '') //if it has no text (bugged)
        $this.text($this.parent().attr('text')); //sets the text which was passed
});

jsFiddle

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

Если у вас есть лучшее решение или информация об этой ошибке, я буду рад принять ее. =]

Обратите внимание, что вы можете перейти на jQuery 1.7.2 или использовать предварительный выпуск UI 1.9.0, как упоминалось в вопросе, если вы не можете дождаться стабильной версии и все еще хотите использовать последние стабильные версии.