0

Firefox 3.xx では正常に動作する JavaScript がありますが、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 以外のブラウザでは関数が呼び出されない

これの解決策を教えてください。

4

3 に答える 3

3

構文は私には問題ないように見えます。

ドキュメント内に同じIDを持つ複数の要素がないこと、および要素IDが有効であることを確認してください。

于 2010-09-09T11:00:24.980 に答える
2

あなたが投稿したコードには本質的に何も悪いことはありません。再現可能な機能しない例を投稿することをお勧めします。問題はページの他の場所にあります。IDdiv文字列が一意ではない可能性があります(これは無効なHTMLであり、動作の信頼性が低くなります)。他のスクリプトが干渉している可能性があります。クロスブラウザ方式で記述されていない、これを起動するイベントコードがある可能性があります。

ただし、3つの異なる方法で要素を非表示にしようとする試みは、私にはやり過ぎのように思えます。たった1回のdisplay変更で問題ありません。

これを行う別の方法は、className='hidden'またはを設定''し、CSSルールを使用してそのクラスをにマップすることdisplay: noneです。<div>これの利点は、問題の要素が(に戻る必要があるdisplay: block)、<span>(に戻る必要があるdisplay: inline)、または他の何かであるかどうかを知る必要がないことです。(テーブル関連の要素には特定の問題があります。)

于 2010-09-09T11:04:19.277 に答える
1

多分あなたはそれを試すことができます:

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(...)

于 2010-09-09T11:01:39.747 に答える