Показать и скрыть JavaScript работает в IE, но не в FF или Chrome - PullRequest
0 голосов
/ 11 сентября 2009

У меня есть несколько диапазонов (20, если быть точным), у всех есть идентификаторы. Затем я в своей таблице стилей установил видимость скрытой.

Я сделал этот скрипт, чтобы показывать и прятать эти пролеты, нажимая на участок карты изображения:

function showDiv(pass) {
    var divs = document.getElementsByTagName('span');    
    for (i = 0; i < divs.length; i++) {
        if (divs[i].id.match(pass)) {
            (pass).style.visibility = 'visible';
            divs[i].style.visibility = 'hidden';
        }          
    }
} 

Он отлично работает в IE, но FF не сдвигается с места, Chrome отображает его достаточно хорошо с небольшими проблемами, которые, я думаю, я могу исправить.

Кто-нибудь знает, почему FF не принимает? Любые предложения будут высоко оценены и компенсированы в загробной жизни:)

Ответы [ 4 ]

2 голосов
/ 11 сентября 2009
style.display = 'none';
style.display = 'inline';

EDIT

Вот мой источник

http://www.w3schools.com/css/pr_class_display.asp

0 голосов
/ 12 сентября 2009
    if (divs[i].id.match(pass)) {

Является ли pass действительно регулярным выражением? Кажется необычным использование match здесь.

        (pass).style.visibility = 'visible';

Это не имеет смысла, является ли pass строкой или регулярным выражением; ни один из них не обладает свойством style. Помещение переменной в скобки не имеет никакого эффекта. Это не работает в любом браузере для меня, в том числе IE.

Полагаю, вы имели в виду:

function showDiv(pass) {
    var divs= document.getElementsByTagName('span');    
    for (var i= 0; i<divs.length; i++)
        divs[i].style.visibility= divs[i].id==pass? 'visible' : 'hidden';
}

Обратите также внимание на var i: это необходимо, чтобы i не стал глобальной переменной. Это очень распространенный источник странных ошибок, когда два цикла for i начинают мешать друг другу.

0 голосов
/ 12 сентября 2009

pass - это идентификатор. В Firefox идентификаторы элементов в DOM не доступны как глобальные ссылки. Вы не можете сделать id .style.visibility = 'visible'; Вместо этого ваша функция должна выглядеть примерно так:

function showDiv(pass) {
    var divs = document.getElementsByTagName('span');    
    for (i = 0; i < divs.length; i++) {
        if (divs[i].id.match(pass)) {
            divs[i].style.visibility = 'hidden';
        }          
    }
    document.getElementById(pass).style.visibility = 'visible';
}

Вы должны иметь возможность установить visibility из pass вне цикла, поскольку вам нужно сделать это только один раз.

0 голосов
/ 12 сентября 2009

Это потому, что вы передаете строку, а затем используете ее как ссылку на элемент. IE должен быть достаточно умным, чтобы искать DOM и находить элемент с идентификатором, совпадающим со строкой.

Попробуйте это ...

if (divs[i].id.match(pass)) {
    document.getElementById(pass).style.visibility = 'visible';
    divs[i].style.visibility = 'hidden';
}

Или Возможно, функция String.match ожидает RegExp. Если вышеизложенное не решает вашу проблему, попробуйте это ...

if (divs[i].id.match(new RegExp(pass, 'gi'))) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...