FireFox这个功能

时间:2009-03-04 16:33:57

标签: javascript internet-explorer firefox this

为什么Firefox无法处理此问题。此代码适用于IE。

<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<script type='text/javascript'>
function drvFunc(elem)
{
    var e = elem.name;
    var d = "document."
    var f = "frm";
    var str = d+"."+f+"."+e+".value;";
    alert(eval(str));
}
</script>
<BODY>
<form name=frm method=post>
<input type=button name=myButton id=myButton value='MyButton' onclick='drvFunc(this)'>
</form>
</BODY>
</HTML>

6 个答案:

答案 0 :(得分:13)

function drvFunc(elem) {
  alert(elem.value);
}

这个函数你不需要邪恶的eval()......

答案 1 :(得分:9)

问题是你有两个句号连接:

  1. var d = "document."
  2. var str = d+"."+f...
  3. 结果字符串变为:"document..frm.myButton.value;"

    删除其中一个句点,它会起作用。

答案 2 :(得分:1)

更改

var d = "document."

var d = "document"

您正在使用“document..frm”运行eval

答案 3 :(得分:1)

我是此代码线程的原作者。我不确定我是否正确地说明了问题。

function drvFunc(elem)
{
    **var e = elem.name;** <-- in firefox, this fails.  e is not initialized!! 
    var d = "document."
...
}

在表单上我可能会编写一些这样的代码,它在IE中运行良好...

<input type=button name=1stButton id=1stButton onclick='drvFunc(this)'>
<input type=button name=2ndButton id=2ndButton onclick='drvFunc(this)'>

... 然后drvFunc可以做到这一点

function drvFunc(elem)
{

}

答案 4 :(得分:1)

你也可以去:

<input type='button' name='2ndButton' id='2ndButton' onclick='drvFunc(this.id)'> 

function drvFunc(elemid){ 
   alert(document.getElementById(elemid).value); 
}

答案 5 :(得分:0)

您需要在<input>标记的属性周围加上引号(单引号或双引号)。

Firefox可能会对IE进行不同的处理:http://www.cs.tut.fi/~jkorpela/qattr.html

您还需要像其他人所说的那样删除"document."中的额外点,并且应该重构drvFunc以删除eval

以下在Fi​​refox 3下完美适用于我:

<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<script type='text/javascript'>
function drvFunc(elem)
{
    alert(elem.value);
}
</script>
</HEAD>
<BODY>
<form name="frm" method="post">
<input type="button" name="myButton" id="myButton" value="MyButton" onclick="drvFunc(this)">
</form>
</BODY>
</HTML>