Javascript не подчиняется изменениям стиля в Firefox - PullRequest
2 голосов
/ 29 октября 2011

Чтобы заглушить, у меня есть следующий код, подчеркивающий мою точную проблему:

<!DOCTYPE html><html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script>
function updateR1(){
    if (c1.checked){
        r1.style.visibility='hidden';
    }
    else{
        r1.style.visibility='visible';
    }
}
function updateR2(){
    if (c2.checked){
        r2.style.display='none';
    }
    else{
        r2.style.display='table-row';
    }
}
</script>
</head>
<body>
    <table>
        <tr id="r1">
            <td>visibility</td>
        </tr>
        <tr id="r2">
            <td>display</td>
        </tr>
    </table>
    <div>
        <input id="c1" type=checkbox onchange="return updateR1();">Hide row 1</input>
        <input id="c2" type=checkbox onchange="return updateR2();">Hide row 2</input>
    </div>
</body>
</html>

Рабочий пример> http://s.supuhstar.operaunite.com/s/content/testHideShow.htm

В Opera, Chrome, IE и Safari первый флажок делает верхний ряд видимым или невидимым, а второй флажок делает второй ряд сжатым / невидимым или расширенным / видимым.Тем не менее, в Firefox, ни один из них не работает.Почему бы и нет?Я пробовал много вариантов этого, включая написание необработанного сценария в атрибуте onchange и использование других атрибутов событий, но он всегда работает на всем, НО Firefox.

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

Я удивлен, что он работает в других браузерах ... но firefox не выполняет ваш JS по правильным причинам ... это неправильно.Вот как должны быть ваши JS-функции:

    function updateR1(){
    if (document.getElementById("c1").checked){
        document.getElementById("r1").style.visibility='hidden';
    }
    else{
        document.getElementById("r1").style.visibility='visible';
    }
}
function updateR2(){
    if (document.getElementById("c2").checked){
        document.getElementById("r2").style.display='none';
    }
    else{
        document.getElementById("r2").style.display='table-row';
    }
}

Кстати, используйте Firebug для Firefox .... ваша жизнь будет раем;)

2 голосов
/ 29 октября 2011

В Firefox вам нужно сделать что-то вроде:

document.getElementById("r1").style.display="none";
document.getElementById("r1").style.display="block";

Если вы можете использовать jQuery для этого, он предоставляет независимые от браузера способы управления видимостью (и почти всем остальным):

http://api.jquery.com/show/

http://api.jquery.com/hide/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...