为什么这不适用于Netscape? [英] Why doesn't this work in Netscape?

查看:71
本文介绍了为什么这不适用于Netscape?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此代码应该适用于Netscape 4+和IE 4+。它在IE中运行良好

但是在Netscape 7.2中,我得到一个空白页面。有什么建议吗?


谢谢,

Brett

< html>

< head>


< script language =" JavaScript"><! -

rowArray = new Array();

rowArray [1] =''< form>第1行:< input type =" button" value =" Reveal"

onClick =" clicked(2)">< \ / form>'';

rowArray [2] =' '这是第1行的一些文字'';

rowArray [3] =''< form>第3行:< input type =" button" value =" Reveal"

onClick =" clicked(4)">< \ / form>'';

rowArray [4] ='点击时第4行显示此文字'';

rowArray [5] =''< form>第5行:< input type =" button" value =" Reveal"

onClick =" clicked(6)">< \ / form>'';

rowArray [6] =' '最后一行的内容'';


viewArray = new Array();

viewArray [1] = viewArray [3] = viewArray [5] = true;

viewArray [2] = viewArray [4] = viewArray [6] = false;


函数refreshTable(){


var output =''< table border =" 1" width =" 500">'';

for(var i = 1; i< = rowArray.length; i ++){

if(viewArray [i ])

输出+ =''< tr>< td>''+ rowArray [i] +''< \ / td>< \ / tr>'';

}

输出+ =''< \ / table>'';


if(document.all)

document.all(''myTable'')。innerHTML = output;

else if(document.layers){

document.layers [''myTable'']。document.open();

document.layers [''myTable'']。document.writeln(输出);

文件。 layers [''myTable'']。document.close();

}

}


函数点击(x) {

viewArray [x] =!viewArray [x];

refreshTable();

}

/ / - >< / script>


< / head>


< body onLoad =" javascript :refreshTable();">

< span id =" myTable" style =" position:absolute">< / span>

< / body>

< / html>

解决方案

Brett说:


这段代码应该适用于Netscape 4+和IE 4+。它在IE中工作正常
但在Netscape 7.2中,我得到一个空白页面。有什么建议?




我建议你忽略在Netscape 4和IE 4中工作的任何代码示例。




该代码已完全过时。




" Lee" < RE ************** @ cox.net>在消息中写道

news:ck ********* @ drn.newsguy.com ...

Brett说:


此代码应该适用于Netscape 4+和IE 4+。它在IE浏览器中运行良好
但在Netscape 7.2中,我得到一个空白页面。有什么建议吗?



我建议您忽略任何在Netscape 4和IE 4中工作的代码示例。

该代码是完全过时。



好​​但是为什么它在Netscape 7.2中不起作用?


谢谢,

Brett


Brett写道:

[snip]

好但是为什么它不起作用Netscape 7.2?




我猜是因为你的逻辑是所有浏览器都支持

document.layers或document.all。这是错误的 - 例如Safari。


功能检测很棒,但只有正确使用它。 Safari

(我怀疑Netscape 7.2)不支持以上任何一种,他们

希望你使用document.getElementById或类似的。


此外,明确地将内容放入数组是耗时的并且使得b / b $ b生活困难,请考虑以下代码(使用功能检测

getElementById)。看看换行,我不能手动换行

因为你的代码设计。


最后,这是我最疯狂的方式看到隐藏和显示行。

简单地给每一行一个id,然后通过

修改显示属性隐藏/显示它们有什么问题?重写是在你的固定代码之下 -

我认为你会发现它简单得多。


你也可以抛弃<! - - // - >"垃圾来隐藏脚本,除非你认为有人使用Netscape 1.0或Mosaic会使用你的页面。


弗雷德。


原始代码的部分修复:


< html>

< head>


< script language =" JavaScript">

var rowArray = [

''empty'',

''< form> Row 1:< input type =" button" value =" Reveal"

onClick =" clicked(2)">< \ / form>'',

''这是一些文字对于第1行'',

''< form>第3行:< input type =" button" value =" Reveal"

onClick =" clicked(4)">< \ / form>'',

''点击第4行显示此文字'',

''< form>第5行:< input type =" button" value =" Reveal"

onClick =" clicked(6)">< \ / form>'',

''最后的内容行'',

]


viewArray = new Array();

viewArray [1] = viewArray [3] = viewArray [5] = true;

viewArray [2] = viewArray [4] = viewArray [6] = false;


function refreshTable(){


var output =''< table border =" 1" width =" 500">'';

for(var i = 1; i< = rowArray.length; i ++){

if(viewArray [i ])

输出+ =''< tr>< td>''+ rowArray [i] +''< \ / td>< \ / tr>'';

}

输出+ =''< \ / table>'';


if(document.all) {

document.all(''myTable'')。innerHTML = output;

alert(''使用doc.all'');

} else {

if(document.layers){

alert(''使用doc.layers'');

文件。 layers [''myTable'']。document.open();

document.layers [''myTable'']。document.writeln(output);

document .layers [''myTable'']。document.close();

} else {

if(document.getElementById){

文献。 getElementById(''myTable'')。innerHTML = output;

alert(''使用doc.GEBI \ n'+输出);

}


}

}

}


函数点击(x){

viewArray [x] =!viewArray [x];

refreshTable();

}

< / script>


< / head>


< body onLoad =" javascript :refreshTable();" >

< span id =" myTable" style =" position:absolute">< / span>

< / body>

< / html>

版本使用元素属性:


< html>

< head>< title>显示/隐藏行< / title>


< script type =" text / javascript">

function showHide(r){

if(r.style.display == ''''){

r.style.display =''none'';

} else {

r.style.display ='''';

}

}

< / script>

< / head>

< body>

< table>

< tr id =" row1">

< td>这是单元格1

< form action ="">

< input type =" button" value =" show / hide row 2"

onclick =" showHide(document.getElementById(''row2''))"

< / td>

< / tr>< tr id =" row2">

< td>这是单元格2< / td>

< / tr>

< / table>

< / body>

< / html>


This code is supposed to work in Netscape 4+ and IE 4+. It works fine in IE
but in Netscape 7.2, I get a blank page. Any suggestions?

Thanks,
Brett
<html>
<head>

<script language="JavaScript"><!--
rowArray = new Array();
rowArray[1] = ''<form>Row 1: <input type="button" value="Reveal"
onClick="clicked(2)"><\/form>'';
rowArray[2] = ''This is some text for row 1'';
rowArray[3] = ''<form>Row 3: <input type="button" value="Reveal"
onClick="clicked(4)"><\/form>'';
rowArray[4] = ''Row 4 when clicked reveals this text'';
rowArray[5] = ''<form>Row 5: <input type="button" value="Reveal"
onClick="clicked(6)"><\/form>'';
rowArray[6] = ''Contents of the last row'';

viewArray = new Array();
viewArray[1] = viewArray[3] = viewArray[5] = true;
viewArray[2] = viewArray[4] = viewArray[6] = false;

function refreshTable() {

var output = ''<table border="1" width="500">'';
for (var i = 1; i <= rowArray.length; i++) {
if (viewArray[i])
output += ''<tr><td>'' + rowArray[i] + ''<\/td><\/tr>'';
}
output += ''<\/table>'';

if (document.all)
document.all(''myTable'').innerHTML = output;
else if (document.layers) {
document.layers[''myTable''].document.open();
document.layers[''myTable''].document.writeln(output);
document.layers[''myTable''].document.close();
}
}

function clicked(x) {
viewArray[x] = !viewArray[x];
refreshTable();
}
//--></script>

</head>

<body onLoad="javascript:refreshTable();">
<span id="myTable" style="position:absolute"></span>
</body>
</html>

解决方案

Brett said:


This code is supposed to work in Netscape 4+ and IE 4+. It works fine in IE
but in Netscape 7.2, I get a blank page. Any suggestions?



I suggest that you ignore any code examples that are supposed
to work in Netscape 4 and IE 4.

That code is completely obsolete.



"Lee" <RE**************@cox.net> wrote in message
news:ck*********@drn.newsguy.com...

Brett said:


This code is supposed to work in Netscape 4+ and IE 4+. It works fine in
IE
but in Netscape 7.2, I get a blank page. Any suggestions?



I suggest that you ignore any code examples that are supposed
to work in Netscape 4 and IE 4.

That code is completely obsolete.


Ok but why exactly doesn''t it work in Netscape 7.2?

Thanks,
Brett


Brett wrote:
[snip]

Ok but why exactly doesn''t it work in Netscape 7.2?



I''d guess because your logic is that all browsers support either
document.layers or document.all. That would be wrong - e.g. Safari.

Feature detection is great, but only if you use it correctly. Safari
(and I suspect Netscape 7.2) don''t support either of the above, they
expect you to use document.getElementById or similar.

Also, explicitly putting content into arrays is time consuming and makes
life difficult, consider the code below (with feature detection for
getElementById). Watch for line wrapping, I can''t manually wrap them
because of your code design.

Lastly, this is the craziest way I''ve seen to hide and show rows.
What''s wrong with simply giving each row an id, then hide/show them by
modifying the display attribute? A re-write is below your fixed code -
I think you will find it vastly simpler.

You can also ditch the "<!-- //-->" junk to hide scripts unless you
think someone with Netscape 1.0 or Mosaic will use your page.

Fred.

Partial fix of original code:

<html>
<head>

<script language="JavaScript">
var rowArray = [
''empty'',
''<form>Row 1: <input type="button" value="Reveal"
onClick="clicked(2)"><\/form>'',
''This is some text for row 1'',
''<form>Row 3: <input type="button" value="Reveal"
onClick="clicked(4)"><\/form>'',
''Row 4 when clicked reveals this text'',
''<form>Row 5: <input type="button" value="Reveal"
onClick="clicked(6)"><\/form>'',
''Contents of the last row'',
]

viewArray = new Array();
viewArray[1] = viewArray[3] = viewArray[5] = true;
viewArray[2] = viewArray[4] = viewArray[6] = false;

function refreshTable() {

var output = ''<table border="1" width="500">'';
for (var i = 1; i <= rowArray.length; i++) {
if (viewArray[i])
output += ''<tr><td>'' + rowArray[i] + ''<\/td><\/tr>'';
}
output += ''<\/table>'';

if (document.all) {
document.all(''myTable'').innerHTML = output;
alert(''Using doc.all'');
} else {
if (document.layers) {
alert(''Using doc.layers'');
document.layers[''myTable''].document.open();
document.layers[''myTable''].document.writeln(output);
document.layers[''myTable''].document.close();
} else {
if (document.getElementById) {
document. getElementById(''myTable'').innerHTML = output;
alert(''Using doc.GEBI\n'' + output);
}

}
}
}

function clicked(x) {
viewArray[x] = !viewArray[x];
refreshTable();
}
</script>

</head>

<body onLoad="javascript:refreshTable();">
<span id="myTable" style="position:absolute"></span>
</body>
</html>
Version using element attributes:

<html>
<head><title>Show/Hide Rows</title>

<script type="text/javascript">
function showHide(r) {
if (r.style.display == '''') {
r.style.display = ''none'';
} else {
r.style.display = '''';
}
}
</script>
</head>
<body>
<table>
<tr id="row1">
<td>Here is cell 1
<form action="">
<input type="button" value="show/hide row 2"
onclick="showHide(document.getElementById(''row2'')) "
</td>
</tr><tr id="row2">
<td>Here is cell 2</td>
</tr>
</table>
</body>
</html>


这篇关于为什么这不适用于Netscape?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆