Проблема с диалоговым окном jquery при использовании themeroller css

Все демонстрации диалогового окна пользовательского интерфейса jquery используют тему "флора". Мне нужна была настроенная тема, поэтому я использовал themeroller для создания файла css. Когда я его использовал, все, казалось, работало нормально, но позже я обнаружил, что не могу контролировать ни один элемент ввода, содержащийся в диалоговом окне (т. е. не могу вводить в текстовое поле, не могу устанавливать флажки). Дальнейшее расследование показало, что это происходит, если я устанавливаю для атрибута диалога «модальный» значение true. Этого не происходит, когда я использую тему флоры.

Вот js-файл:

topMenu = {
    init: function(){
        $("#my_button").bind("click", function(){
            $("#SERVICE03_DLG").dialog("open");
            $("#something").focus();
        });

        $("#SERVICE03_DLG").dialog({ 
            autoOpen: false,
            modal: true, 
            resizable: false,
            title: "my title",
            overlay: { 
                opacity: 0.5, 
                background: "black" 
            }, 
            buttons: { 
                "OK": function() { 
                    alert("hi!");
                }, 
                "cancel": function() { 
                    $(this).dialog("close"); 
                } 
            },
            close: function(){
                $("#something").val("");
            }
        });
    }
}

$(document).ready(topMenu.init);

Вот html, который использует тему флоры:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>sample</title>
<script src="jquery-1.2.6.min.js" language="JavaScript"></script>
<link rel="stylesheet" href="flora/flora.all.css" type="text/css">
<script src="jquery-ui-personalized-1.5.2.min.js" language="JavaScript"></script>
<script src="TopMenu.js" language="JavaScript"></script>
</head>
<body>

<input type="button" value="click me!" id="my_button">
<div id="SERVICE03_DLG" class="flora">please enter something<br><br>
<label for="something">somthing:</label>&nbsp;<input name="something" id="something" type="text" maxlength="20" size="24">
</div>

</body>
</html>

Вот html, который использует загруженную тему themeroller:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>sample</title>
<script src="jquery-1.2.6.min.js" language="JavaScript"></script>
<link rel="stylesheet" href="jquery-ui-themeroller.css" type="text/css">
<script src="jquery-ui-personalized-1.5.2.min.js" language="JavaScript"></script>
<script src="TopMenu.js" language="JavaScript"></script>
</head>
<body>

<input type="button" value="click me!" id="my_button">
<div id="SERVICE03_DLG" class="ui-dialog">please enter something<br><br>
<label for="something">somthing:</label>&nbsp;<input name="something" id="something" type="text" maxlength="20" size="24">
</div>

</body>
</html>

Как видите, отличается только указанный файл css и имена классов. Кто-нибудь знает, что может быть не так?

@David: я попробовал, и, похоже, это не работает (ни в FF, ни в IE). Я попробовал встроенный css:

style="z-index:5000"

и я также пробовал ссылаться на внешний файл CSS:

#SERVICE03_DLG{z-index:5000;}

Но ни один из них не работает. Я что-то упустил в том, что вы предложили?

Редактировать:
Решите с помощью brostbeef!
Поскольку изначально я использовал флору, я ошибочно предположил, что должен указать атрибут класса. Оказывается, это верно только тогда, когда вы действительно используете тему флоры (как в примерах). Если вы используете настраиваемую тему, указание атрибута класса вызывает такое странное поведение.


person Ovesh    schedule 05.09.2008    source источник
comment
У вас все еще есть эта проблема??   -  person MDCore    schedule 16.10.2008
comment
Не знаю, почему вы удалили свой код и заменили ссылки ... которые теперь не работают, поэтому на них нельзя ссылаться.   -  person clairestreb    schedule 25.12.2014
comment
ой, совсем забыл об этом. Я посмотрю, смогу ли я отредактировать пост, чтобы вернуть код.   -  person Ovesh    schedule 25.12.2014


Ответы (4)


Я думаю, это потому, что у вас разные классы.
<div id="SERVICE03_DLG" class="flora"> (флора)
<div id="SERVICE03_DLG" class="ui-dialog"> (пользовательский)

Даже с темой флоры вы все равно должны использовать класс ui-dialog, чтобы определить ее как диалог.

Раньше я делал модальные окна и даже не определял класс в теге. jQueryUI должен позаботиться об этом за вас.

Попробуйте избавиться от атрибута class или использовать класс «ui-dialog».

person brostbeef    schedule 23.10.2008
comment
Спасибо! Оказывается, это на самом деле проблема с флорой. Я отредактирую вопрос, чтобы отразить его. - person Ovesh; 24.10.2008

После игры с этим в Firebug, если вы добавите атрибут z-index больше 1004 к вашему div по умолчанию, идентификатор «SERVICE03_DLG», тогда он будет работать. Я бы дал что-то очень высокое, например, 5000, просто чтобы быть уверенным.

Я не уверен, что именно в CSS themeroller вызывает это. Вероятно, они изменили или пренебрегли атрибутом позиции целевого элемента div, который превратился в диалоговое окно.

person David McLaughlin    schedule 05.09.2008

Я попытался реализовать тему themeroller с диалоговым окном и вкладками, и оказалось, что CSS-файл themeroller не работает с официальным jQuery! Специально для диалогов и вкладок они изменили классы элементов из официальных jquery. См. здесь: http://filamentgroup.com/lab/introduction_themeroller_design_download_custom_themes_for_jquery_ui/

Комментарий пользователя:

3) сгенерированная тема, которую я загрузил, кажется неполной - когда я пытаюсь ее использовать, мои вкладки (которые работают с темой флоры, код идентичен примеру документации) не оформляются как вкладки

Наткнувшись на 3, я подумал, что застрял и мне придется вернуться, используя «флору»… С тех пор я обнаружил, прочитав исходный код «демонстрационного» файла, что если я настрою свой html и дам элементы ‹ li>, я используя для моих вкладок класс «ui-tabs-nav-item», тогда он будет работать.

Тема, сгенерированная themeroller, к сожалению, неполная. Если материал вкладок неполный, это заставляет меня задаться вопросом, что еще не завершено. Это было довольно неприятно. :(

сопровождаемый комментарием разработчиков themeroller:

3) Мы посмотрим на это. Вы правы, что эти классы должны быть добавлены плагином. На данный момент, вероятно, не помешает просто добавить их в свою разметку, чтобы вы могли использовать темы themeroller. Впрочем, мы это проверим. Я думаю, что наши селекторы могли бы быть основаны на родительском селекторе ui-tabs, но я думаю, что мы пытались не использовать элементы в наших селекторах. Учтите это в списке дел

person MDCore    schedule 07.10.2008

Мужик, это хорошо. Я пытался сделать кучу вещей на этих двух страницах. Пробовали ли вы вообще отказаться от CSS и попробовать обе страницы? Я использовал Firebug для удаления CSS из шапки на обеих страницах, и ввод по-прежнему работал на одной, а не на другой — но я склонен полагать, что Firebug не полностью удаляет CSS из рендеринга, и вы получат другие результаты, если вы действительно удалите его из кода.

Я также обнаружил, что вы можете вставлять текст в текстовое поле с помощью мыши — он просто не будет принимать ввод с клавиатуры. Однако, похоже, на нем нет обработчика событий, который мог бы помешать этому.

person Brock Boland    schedule 05.09.2008