Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод show в jQuery, display в зависимости от браузера 
V
    Опции темы
KSURi
Дата 21.4.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Метод show (и toggle тоже) по умолчанию присваивает атрибуту display значение block (display: block).
Мне надо изменять это значение в зависимости от браузера. По сути нужен аналог вот этого:
Код

elem.style.display = navigator.appName == 'Microsoft Internet Explorer' ? 'inline' : 'table-row';

Это возможно без правки самой либы?


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
KSURi
Дата 21.4.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Нашел упоминание о jQuery.fn.extend. Добавил в начало вот такую штуку:
Код

jQuery.fn.extend({
    show: function(speed,callback){
        return speed ?
            this.animate(
                {height: "show", width: "show", opacity: "show"}, speed, callback
            ) :
            this.filter(":hidden").each(function(){
                this.style.display = this.oldblock || "";
                if ( jQuery.css(this,"display") == "none" ) {
                    var elem = jQuery("<" + this.tagName + " />").appendTo("body");
                    this.style.display = elem.css("display");
                    // <изменения>
                    if (this.style.display == "none")
                        this.style.display = navigator.appName == 'Microsoft Internet Explorer' ? 'inline' : 'table-row';
                    alert(this.style.display);
                    // </изменения>
                    elem.remove();
                }
            })
    }
});

Даже алерт не отрабатывает(


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ksnk
Дата 21.4.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



Цитата(KSURi @  21.4.2008,  13:54 Найти цитируемый пост)
Это возможно без правки самой либы? 

Вероятно - нет. Да и не надо...

Цитата(KSURi @  21.4.2008,  14:32 Найти цитируемый пост)
Даже алерт не отрабатывает( 

imho, это говорит о том, что в этом случае идем по ветке "this.animate...".

block,imho, выставляется только в случае, если элемент был display:none, так что перед стандартным show можно вручную выставить элементу...css({display:jQuery.browser.msie?'inline' : 'table-row'}) ... 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KSURi
Дата 21.4.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Цитата(ksnk @  21.4.2008,  15:49 Найти цитируемый пост)
block,imho, выставляется только в случае, если элемент был display:none, так что перед стандартным show можно вручную выставить элементу...css({display:jQuery.browser.msie?'inline' : 'table-row'}) ...  

Я не вызываю show непосредственно, все происходит через метод toggle. К тому же, если перед show выставить display в inline/table-row, то анимации просто не будет (будет мгновенное сокрытие/раскрытие)

Цитата(ksnk @  21.4.2008,  15:49 Найти цитируемый пост)
imho, это говорит о том, что в этом случае идем по ветке "this.animate...".

Да, вот здесь я протупил. Однако, как видно по сорцу, ветка this.animate... принимает управление при наличии аргумента speed (show('slow')). Вызвал без аргумента, алерт все равно не выскочил =(
Зато, только что заметил, display правильно выставился в table-row =)

Это сообщение отредактировал(а) KSURi - 21.4.2008, 17:58


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ksnk
Дата 21.4.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 38
Всего: 386



Цитата(KSURi @  21.4.2008,  17:42 Найти цитируемый пост)
если перед show выставить display в inline/table-row, то анимации просто не будет 

Ну, тогда 
...css({display:jQuery.browser.msie?'inline' : 'table-row',opacity:0.01}).animate({opacity:1}) 
вместо show.
Там можно добавить и width-height, если надо...

Цитата(KSURi @  21.4.2008,  17:42 Найти цитируемый пост)
алерт все равно не выскочил =(

Значит, не в этом месте block выставляется smile
я подозреваю, что где-то здесь
Код

    // Each step of an animation
    step: function(gotoEnd){
...
                    // Reset the display
                    this.elem.style.display = this.options.display;
                    if ( jQuery.css(this.elem, "display") == "none" )
                        this.elem.style.display = "block";


Правда, ковыряя библиотеку совсем уж в потрохах, можно нарыть забавных и не всегда безопасных грабель smile Особенно, если используются плагины, в которых используется этот самый animate... smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Isis
Дата 21.4.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



Код

if($('#cont').is(':hidden')) 
{
         $('#cont').toggle('slow');
         $('#cont').css('display', navigator.appName == 'Microsoft Internet Explorer' ? 'inline' : 'table-row');
}
else
{
    $('#cont').toggle('slow');
}


Это сообщение отредактировал(а) Isis - 21.4.2008, 18:50
PM MAIL WWW ICQ   Вверх
KSURi
Дата 22.4.2008, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Isis к моему вопросу это никак не относится...


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
KSURi
Дата 22.4.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Вобщем пришлось изменить сам jquery.js. Вопрос решен, тему можно закрыть.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0839 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.