• ベストアンサー

ブラウザ判別

テーブル行をスイッチによって表示非表示を切り替える機能を実装してるんですが IEではtable-rowを入れてもエラーを出し NNやFirefoxではblockを入れるとレイアウトが崩れてしまい IEの場合block、NNやFirefoxではtable-rowを判別していれるようにしたんですが 切り替えているとなぜかたまにblockが入ってしまうことがあります //ブラウザ判別 if (document.all) { var display = 'block'; } else if (document.getElementById) { var display = 'table-row' } if(switch_1 == "on"){ document.getElementById('row1').style.display = display; document.getElementById('row2').style.display = 'none'; document.getElementById('row3').style.display = display; } if(switch_1 == "off"){ document.getElementById('row1').style.display = 'none'; document.getElementById('row2').style.display = display; document.getElementById('row3').style.display = 'none'; } 何かおかしいのでしょうか もしくは代替方法があればご教示お願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

あえてブラウザ判別などせずに ・・・.style.display = ''; っていうわけにはいきませんか?

futaba7777
質問者

お礼

それでやってみたら誤動作も無くなり想定している動作が出来ました 空を入れると初期設定に戻るんですかね? ありがとうございました

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>空を入れると初期設定に戻るんですかね? 微妙・・・、実際にはブラウザの解釈によります。 そこで、タグのスタイルをいじるのではなく、クラスで調整する 方がよいですね。 (複数のクラスを設定する場合はもう少し工夫が必要ですが) <script> var switch_1="off"; window.onload=function(){ change(); } function change(){ switch_1=switch_1=="on"?"off":"on"; if(switch_1 == "on"){ document.getElementById('row1').className = ""; document.getElementById('row2').className = "hide"; document.getElementById('row3').className = ""; }else if(switch_1 == "off"){ document.getElementById('row1').className = "hide"; document.getElementById('row2').className = ""; document.getElementById('row3').className = "hide"; } } </script> <style> .hide{ display:none; } </style> <input type="button" value="change" onClick="change()"> <table> <tbody> <tr id="row1"> <td>1</td> <td>2</td> </tr> <tr id="row2"> <td>3</td> <td>4</td> </tr> <tr id="row3"> <td>5</td> <td>6</td> </tr> </tbody> </table>

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

いや、 私の指摘は 文法がおかしいから直せってことよ。 問題の解決方法じゃないわ。 ブラウザの判定がおかしいかどうかは デバッグしてみればいいんじゃない? 私には提示されているコードに 文法以外の問題があるようには見えないの。 て、今更だけど、結構すごいことに気づいたわ。 var display = 'block' この変数displayだけど 名前変えなさい。 案外これで直るかもよ。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

if (document.all) { var display = 'block'; } else if (document.getElementById) { var display = 'table-row' } は var display; if (document.all) { display = 'block'; } else if (document.getElementById) { display = 'table-row' } こう書かないとダメよ。 この点以外は特におかしなところは見当たらないわ。 原因があるとしたらもっと別のところじゃないかしら。

futaba7777
質問者

補足

回答どおりに書き換えても誤作動はなくなりませんでした ↑の回答者さんのとおりにすると誤作動しないということは ブラウザ判別部分に何かおかしいことがあるんでしょうか・・

関連するQ&A

  • NN4で、ある日時になったら画像を消したい

    先日、ある日時になったら画像を消す方法を教えて頂いたのですが、NN4でも動くように修正したいのですがどうすればいいかわかりません。 その時教えて頂いたソースは下記です。 function start(){ var limitTime="2006/04/10 11:50:30";//ある日時を設定して下さい。 var limitDate=new Date(limitTime); var nowDate=new Date(); defTime=limitDate-nowDate; if(defTime>0){ document.getElementById("img1").style.display="block"; document.getElementById("img2").style.display="block"; setTimeout("task()",defTime); }else{ document.getElementById("img1").style.display="none"; document.getElementById("img2").style.display="none"; } } function task(){ document.getElementById("img1").style.display="none"; document.getElementById("img2").style.display="none"; } どうすれば動くようになるのか教えて頂けないでしょうか。 よろしくお願いします。

  • 文の折りたたみ

    ブログなどでよくある「続き」を折りたたみで表示する方法を教えて下さい。 ググってみたのですが、ブログのテンプレしか見つけられず、それを普通のページにどう応用したらいいのかがサッパリ分かりません。 ヘッダに <script type="text/javascript"> <!-- function showMore(varA1, varB1){ var123 = ('varXYZ' + (varA1)); varABC = ('varP' + (varA1)); if( document.getElementById ) { if( document.getElementById(var123).style.display ) { if( varB1 != 0 ) { document.getElementById(var123).style.display = "block"; document.getElementById(varABC).style.display = "none"; } else { document.getElementById(var123).style.display = "none"; document.getElementById(varABC).style.display = "block"; } } else { location.href = varB1; return true; } } else { location.href = varB1; return true; } } //--> </script> …と記述するのは分かったのですが、本文中をどうすればいいのか… お願いします。

  • firefoxで表の表示切替操作の異常

    以下のコードはIE ver.7では正常に作動しますが、firefoxで表示/非表示を繰り返すとおかしくなり表がどんどん広がっていきます。 どこが間違っているのでしょうか。 firefoxでも正常に作動する方法をよろしくご教示お願いします。 ================================================= <html><head> <script language="javascript"><!-- [CDATA[ window.onload = function(){ var body = document.getElementById("body"); var toggle = document.getElementById("toggle"); toggle.onclick = function(){ if (body.style.display == "none") { body.style.display = "block"; } else { body.style.display = "none"; } return false; } } //]] --></script><noscript></noscript> </head><body> <table border="1" ><tbody> <tr><td>[<a href="#" id="toggle">表示切替</a>]</td></tr> <tr id="body"><td>こんにちわ</td></tr> </tbody> </table> </body></html> =================================================

  • javascriptがIEで機能しない

    ヘッダー内 <script language="JavaScript"> <!-- function view_ctrl() { selectvalue = document.form1.select1.options[form1.select1.selectedIndex].value; if(document.getElementById) { document.getElementById("block1").style.display = "none"; if(selectvalue=="選択1"){ document.getElementById("block1").style.display = "block" } } } // --> </script> ボディー内 <form name="form1"> <select name="select1" onchange="view_ctrl()"> <option value="">選択してください</option> <option>選択1</option> <option>選択2</option> </select> </form> <table><tr><td><div id="block1" style="display:block">表示</div></td></tr></table> Firefox3.6ではうまく選択肢によって表示非表示にできたのですが、IE8では選択1を選択しても非表示のままです どこを修正してやればいいでしょうか? ぜひ御指南ください。

  • window.onloadのコマンドについて

    下記のソースにあるリセットボタンをクリックした時に、 フォーム内のデータを消去すると共に、window.onloadコマンドを 実行させるようにしたいと考えています。 どのように制御すればよいのか、ご教授頂ければ幸いです。 よろしくお願い致します。 ソース: ---------------------------------------------------------- <script> <!--オンロードさせ、リロード時に選択を保持--> window.onload = loadform; function loadform (){ entryChange01(); entryChange02(); entryChange03(); entryChange04(); } <!--フォームの表示/非表示の制御1--> function entryChange01(){ radio = document.getElementsByName('radio01') if(radio[0].checked) { document.getElementById('table2').style.display = "none"; document.getElementById('table3').style.display = "none"; }else if(radio[1].checked) { document.getElementById('table2').style.display = ""; document.getElementById('table3').style.display = ""; } } <!--フォームの表示/非表示の制御2--> function entryChange02(){ radio = document.getElementsByName('radio02') if(radio[0].checked) { document.getElementById('table5').style.display = "none"; document.getElementById('table6').style.display = "none"; }else if(radio[1].checked) { document.getElementById('table5').style.display = ""; document.getElementById('table6').style.display = ""; } } } </script> <input type="reset" value="リセット" onclick="return confirm('本当に入力内容を削除してもよろしいですか?');" />&nbsp;

  • IE6,7で折りたたみメニューの状態を記憶

    現在、下記のソースで折りたたみメニューを作っています。 var trList = new Array("treeMenu1","treeMenu2","treeMenu3","treeMenu4","treeMenu5","treeMenu6"); // ツリーメニューのリスト function exMenu(tName) { for (i=0; i<trList.length; i++) document.getElementById(trList[i]).style.display = "none"; var tMenu=(document.all)?document.all(tName).style:document.getElementById(tName).style; (tMenu.display=='none')?tMenu.display="block":tMenu.display="none"; } このメニューで開いたリンク先に飛んで、ブラウザの戻るボタンで戻ったとき、開いていたメニューが開いたままになるようにしたいのですが、FireFox,Safariではうまくいくのですが、IE6,7では閉じてしまいます。 なんとかならないでしょうか?

  • ネットスケープ6を簡単に判別する方法?

    ブラウザの判別方法についてなんですが、IEとNN4の判別方法については雑誌などでよく見かけるのですが、NN6を簡単に判別する方法が載っている本が見つけられませんでした。 NN6を簡単に判別する方法を知っている方がいたら、教えて下さい。 ちなみに、IEとNN4は次のようなif文で判別しています。 if (document.all) {  // IE if (document.layers) { // NN4 また、NN6と「Mozilla」は、別のものとして判断しないといけないのでしょうか? (JavaScriptでできることに、大きな違いがあるのでしょうか?) それと、最近よく耳にする「Opera」というブラウザも、IEやNNとはまった区別の判定方法をしなければいけないのでしょうか? このMozillaやOperaのJavaScriptに関する情報を載せているページなどがありましたら、是非教えて下さい。

  • セレクトボックスの中を一部隠したい ( IE )

    セレクトボックスの中を一部隠したいのですが、IEでは隠れてくれません。firefoxなどでは、ちゃんと隠れるのですが、IEではどのようにすれば隠れるのでしょうか? (例) 以下のセレクトボックスで、0・1のみ表示されるようにしたいです。 <select name="s" id="s"> <option value="0" name="s[0]" id="s[0]" >0</option> <option value="1" name="s[1]" id="s[1]" >1</option> <option value="2" name="s[2]" id="s[2]" style="display:none;">2</option> </select> また、javascriptで隠した部分を表示・非表示したいのですが、あわせて教えていただけないでしょうか。 firefox など、では以下で変化があるのですが、 document.getElementById('s[2]').style.display='block';   //表示 document.getElementById('s[2]').style.display='none';   //非表示 IE ではうんともすんともいってくれません・・・ document.all('s[2]').style.display='block';   //表示 document.all('s[2]').style.display='none';   //非表示 ちなみにテスト環境はIE7になります、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • フォームのリアルタイム入力チェック

    現在、下記ソース(他のサイト様を参考)に送信時に入力チェックを行い、 エラーがあれば、送信されないようものを使っております。 送信時に加え、入力時に入力項目のみをリアルタイムに入力判定を行いたいです、 入力時にリアルタイムに行うためには、どのようにすればいいのでしょうか。 エラーがあれば、下記のように隠しているメッセージなどが表示され、 問題がなければ、表示させないまたは、表示されているエラーメッセージを隠す。 で構いません。 よろしくお願い致します。 ・htmlファイル <div id="notice-form" style="display: none; color: red;"> 【必須項目に未入力があります】</div> <form name="mailform" method="post" action="index.php" onsubmit="return formCheck()"> <!--テキスト--> <div id="text1" style="display: none; color: red;"> 【text1入力して下さい】</div> <input type="text" name="text1" /><br /> <div id="text2" style="display: none; color: red;"> 【text2入力して下さい】</div> <input type="text" name="text2" /><br /> <div id="text3" style="display: none; color: red;"> 【text3入力して下さい】</div> <input type="text" name="text3" /><br /> ・JSファイル function formCheck(){ var flag = 0; if(document.mailform.text1.value==""){ flag = 1; document.getElementById('text1').style.display="block"; }else{ document.getElementById('text1').style.display="none"; } if(document.mailform.text2.value==""){ flag = 1; document.getElementById('text2').style.display="block"; }else{ document.getElementById('text2').style.display="none"; } if(document.mailform.text3.value==""){ flag = 1; document.getElementById('text3').style.display="block"; }else{ document.getElementById('text3').style.display="none"; } if(flag){ document.getElementById('notice-form').style.display="block"; return false; }else{ document.getElementById('notice-form').style.display="none"; return true; } }

  • 砂時計について教えてください。

    下のように記述すると、NN、Firefoxの最新版では特に何もないのですが、IEの最新版ではマウスカーソルを動かすたびに砂時計がチカチカと出る理由を教えてください。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <script type="text/JavaScript"> <!-- function over(){document.getElementById("menu0").style.display="block";} function over2(n){ for(i = 1;i < 2;i++){ document.getElementById("menu"+i).style.display="none"; } document.getElementById("menu"+n).style.display="block"; document.getElementById("menu"+n).style.top=(n*20)-20+"px"; } function out(n){ for(i = 1;i < 2;i++){ document.getElementById("menu"+i).style.display="none"; } } //--> </script> <table cellspacing="0" cellpadding="0"> <tr> <td valign="top"> <div id="menu0" style="display:none;"> <div onmouseover="over2(1)"><a href="url01.html">link01</a></div> </div> </td> <td valign="top"> <div id="menu1" style="display:none;" onmouseover="over2(1)" onmouseout="out(1)"> <div><a href="url11.html">link11</a></div> </div> <div id="menu2" style="display:none;" onmouseover="over2(2)" onmouseout="out(2)"> <div><a href="url21.html">link21</a></div> </div> <div id="menu3" style="display:none;" onmouseover="over2(3)" onmouseout="out(3)"> <div><a href="url31.html">link31</a></div> </div> </td> </tr> </table>