Discussion:
Опять IE. Что же это такое?
(слишком старое сообщение для ответа)
Dimon
2009-04-03 09:16:15 UTC
Permalink
Hi All!

Есть функция.

function ShowHideFormOtbor()
{
var tbody = document.getElementById('otbor');

if(tbody.style.display == 'none')
{
tbody.style.display = 'block';
}
else
{
tbody.style.display = 'none';
}
}

Отображает или скрывает часть таблицы, находящейся в <tbody>...</tbody>.
Функция запускается по onclick на всегда-видимой строке таблицы.
Работает в: Opera, Google Chrome, FireFox. А вот в осле не работает.
При попытке вывести tbody.style.display в осле, выдает пустое значение. В
чем здесь проблема?
Я уже и MSDN ковырял. Hо так и не понял, из-за чего так получается.
Peter B. Shalimoff
2009-04-03 14:05:50 UTC
Permalink
Post by Dimon
При попытке вывести tbody.style.display в осле, выдает пустое
значение.
Свойство style - это объединение стилей, заданных в HTML коде страницы:
в элементах <style>, в inline стилях (атрибут style элемента) и в
яваскриптах. Если в коде свойство display для otbor не задано, то и
свойство style.display ничего не вернет. Т.е. выходов два: 1) явно
задать в коде display, 2) юзать свойство currentStyle (про него в MSDN
написано):

tbody.style.display = tbody.currentStyle.display == 'none'
? 'block' : 'none';

В DOM аналог currentStyle получают вызовом метода getComputedStyle
интерфейса ViewCSS. Как получить интерфейс - зависит от браузера. В
Gecko он лежит в свойстве document.defaultView:
var currentStyle = document.defaultView.getComputedStyle(tbody, null);
--
0xdeadbeef
Dimon
2009-04-03 15:16:55 UTC
Permalink
Hi Peter B. Shalimoff!
Post by Peter B. Shalimoff
в элементах <style>, в inline стилях (атрибут style элемента) и в
яваскриптах. Если в коде свойство display для otbor не задано, то и
свойство style.display ничего не вернет.
Простите, это не написал.
Стиль задан.По умоляанию display: none;
Вот таким образом
<tbody id="otbor" style="display: none;">
Peter B. Shalimoff
2009-04-03 16:09:45 UTC
Permalink
Post by Dimon
Стиль задан.По умоляанию display: none;
Вот таким образом
<tbody id="otbor" style="display: none;">
Очень странно. А currentStyle.display что возвращает?

Мой IE 8 (8.0.6001.18702) возвращает "none" на таком примере:
<table border="1">
<tbody id="otbor" style="display: none;">
<tr>
<td>1</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
var tbody = document.getElementById("otbor");
document.write("tbody: style.display='" + tbody.style.display
+ "', currentStyle.display='" + tbody.currentStyle.display + "'");
</script>

Выхлоп:
tbody: style.display='none', currentStyle.display='none'

Если убрать атрибут style у otbor, то выхлоп такой:
tbody: style.display='', currentStyle.display='block'
--
0xdeadbeef
Dimon
2009-04-06 06:45:34 UTC
Permalink
Post by Peter B. Shalimoff
Post by Dimon
Стиль задан.По умоляанию display: none;
Вот таким образом
<tbody id="otbor" style="display: none;">
Очень странно. А currentStyle.display что возвращает?
Возвращает inline. Если убираю атрибут style, то всеравно возвращает inline.
Peter B. Shalimoff
2009-04-06 08:05:23 UTC
Permalink
Post by Dimon
Post by Peter B. Shalimoff
Post by Dimon
<tbody id="otbor" style="display: none;">
Очень странно. А currentStyle.display что возвращает?
Возвращает inline. Если убираю атрибут style, то всеравно возвращает
inline.
Во жесть. А _точно_ в другом месте страницы стиль для otbor не
переопределяется? Hапример, так:
<tbody id="otbor" style="display: none;">
...
<style>
tbody { display: inline; }
</style>

Или так:
<style>
tbody
{
display: inline !important;
}
</style>
...
<tbody id="otbor" style="display: none;">

Последний вариант также возможен, если в свойстах браузера задан
пользовательский стиль: меню Tools -> Options -> закладка General ->
кнопка Accessibility -> чекбокс Format documents using my style sheet.
--
0xdeadbeef
Dimon
2009-04-06 09:08:10 UTC
Permalink
Hi Peter B. Shalimoff

Вобщем как всегда сам натупил.

Hа странице есть <input name="otbor"> из-за этого и трабла.

Спасибо за помощь.
Peter B. Shalimoff
2009-04-06 09:18:43 UTC
Permalink
Post by Dimon
Hа странице есть <input name="otbor"> из-за этого и трабла.
Мощно. :) Странно, что getElementById его возвращало. Или у него кроме
name еще и id="otbor"?
--
0xdeadbeef
Dimon
2009-04-06 09:36:50 UTC
Permalink
Post by Peter B. Shalimoff
Post by Dimon
Hа странице есть <input name="otbor"> из-за этого и трабла.
Мощно. :) Странно, что getElementById его возвращало. Или у него кроме
name еще и id="otbor"?
Hет id у него нету, но уже как-то сталкивался с тем, что IE как-то по своему
на id реагирует. По сути за name его принимает. Подробностей сего не знаю,
но как-то был элемент с одинаковым id и name. И при работе с этим элементом
в джаве были проблемы именно из-за этого.
Semen Panevin
2009-04-04 04:18:54 UTC
Permalink
Доброго здоровьица тебе, Dimon!

03 апр 09 13:16, Dimon писал All:

Di> function ShowHideFormOtbor()
Di> {
Di> var tbody = document.getElementById('otbor');

Di> if(tbody.style.display == 'none')
Di> {
Di> tbody.style.display = 'block';
= '';

Di> }
Di> else
Di> {
Di> tbody.style.display = 'none';
Di> }
Di> }

Di> Отображает или скрывает часть таблицы, находящейся в
Di> <tbody>...</tbody>. Функция запускается по onclick на всегда-видимой
Di> строке таблицы. Работает в: Opera, Google Chrome, FireFox. А вот в
Di> осле не работает. При попытке вывести tbody.style.display в осле,
Di> выдает пустое значение. В чем здесь проблема? Я уже и MSDN ковырял. Hо
Di> так и не понял, из-за чего так получается.



С наилучшими пожеланиями, Семён.

... Не ищи смысл там, где его нет... (c) Sage
Loading...