Javascript работает на Firefox, но не в Chrome и IE6 - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть javascript, который отлично работает в Firefox 3.x.x, но он не работает в IE *, Chrome, Safari. Простое оповещение работает перед вызовом функции. Вот код

function showDiv(div){
 //alert(div);
 document.getElementById(div).style.visibility='visible';
 document.getElementById(div).style.height='auto';
 document.getElementById(div).style.display='block';}
function hideDiv(div){
 //alert(div);
 document.getElementById(div).style.visibility='hidden';
 document.getElementById(div).style.height='0px';
 document.getElementById(div).style.display='none';
}

вот код HTML-страницы

<td align="center"><a onclick="showDiv('<?=$val['keyname']?>')" style="cursor:pointer;">Edit</a></td>

если я поставлю alert() перед showDiv('<?=$val['keyname']?>'), появится окно предупреждения, но функция не вызывается в других браузерах, кроме fire fox

Пожалуйста, скажите мне решение для этого.

Ответы [ 3 ]

3 голосов
/ 09 сентября 2010

Синтаксис выглядит нормально для меня.

Убедитесь, что в документе нет нескольких элементов с одинаковым идентификатором, и что идентификаторы вашего элемента действительны.

2 голосов
/ 09 сентября 2010

В исходном коде нет ничего неправильного. Я предлагаю вам опубликовать воспроизводимый нерабочий пример: проблема будет в другом месте на странице. Возможно, строка div ID не уникальна (это недопустимый HTML-код и поведение будет ненадежным); может быть, есть какой-то другой сценарий, создающий помехи, возможно, у вас есть код события, запускающий это, который не написан кросс-браузерным способом

Однако ваши попытки скрыть элемент тремя различными способами кажутся мне излишними. Только одно изменение display может подойти.

Другой способ сделать это - установить className='hidden' или '' и использовать правило CSS для сопоставления этого класса с display: none. Преимущество этого состоит в том, что вам не нужно знать, является ли рассматриваемый элемент <div> (который должен вернуться к display: block), <span> (который должен вернуться к display: inline) или что-то еще. (У элементов, связанных с таблицей, есть особые проблемы.)

1 голос
/ 09 сентября 2010

Может быть, вы могли бы попробовать это:

function showDiv(div) {
    var obj = document.getElementById(div);
    if (obj) {
        obj.style.display = "block";
        obj.style.height = "auto";
    } else {
       alert("DIV with id " + div + " not found. Can't show it.");
    }
}

function hideDiv(div) {
    var obj = document.getElementById(div);
    if (obj) {
        obj.style.display = "none";
    } else {
       alert("DIV with id " + div + " not found. Can't hide it.");
    }
}

Не вызывайте document.getElementById несколько раз в одной и той же функции, используйте переменную для хранения элемента div.

Тест if (obj) выполнит код только в том случае, если он был найден document.getElementById(...).

...