0

我想知道为什么我的代码说当我尝试使用数据绑定做一个简单的代码时它没有定义:/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<object name="login" id="login" classid="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
    <param name="DataURL" value="member.txt"/>
    <param name="UseHeader" value="true"/>
    <param name="TextQualifier" value=""/>
    <param name="FieldDelim" value="|"/>
</object>

    <script>
        var rs = login.resultset;
        function validation()
        {
            rs.moveFirst();
            while(rs.moveNext())
            {           
                if(document.getElementById("txtid")== rs(0) && document.getElementById("txtpass")==rs(1))
                {
                    alert("Login Succeed");
                    return; 
                }
            }
            alert("Email or Password Wrong");
            return;
        }
    </script>

</head>


<body>
<form>
Username: <input type="text" id="txtid" /> <br/>
Password: <input type="text" id="txtpass" /><br/>
<input type="submit" value="game start" id="btnstart" onclick="validation()"/>
</form>
</body>
</html>

错误:login is not defined

但我知道它已定义!我试图搜索这个,但我不知道我的代码有什么问题:/请帮助?



编辑: 我已经将我的代码更新为这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>


<body>


<form>
Username: <input type="text" id="txtid" /> <br/>
Password: <input type="text" id="txtpass" /><br/>
<input type="submit" value="game start" id="btnstart" onclick="validation()"/>
</form>



<object name="login" id="login" classid="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83">
        <param name="DataURL" value="member.txt"/>
        <param name="UseHeader" value="true"/>
        <param name="TextQualifier" value=""/>
        <param name="FieldDelim" value="|"/>
</object>

<script>
    var login = document.getElementById('login');
    var rs = login.resultset;
    function validation()
    {
        rs.moveFirst();
        while(rs.moveNext())
        {           
            if(document.getElementById("txtid")== rs(0) && document.getElementById("txtpass")==rs(1))
            {
                alert("Login Succeed");
                return; 
            }
        }
        alert("Email or Password Wrong");
        return;
    }
</script>

</body>
</html>

我得到的下一个错误是rs is undefined当我单击按钮时。难道我做错了什么?

4

2 回答 2

1

在您的代码中:

> <object name="login" id="login" ...>
>   ...
> </object>
>  <script>
>          var rs = login.resultset;  

您期望具有 id login的元素可作为全局变量使用,它始终是某些浏览器,而其他浏览器仅在某些条件下可用。这从来都不是一个好主意,也不应该被使用,总是使用标准 DOM 方法引用元素,在本例中为getElementById

  var el = document.getElementById('login');

此外,对象元素没有标准的结果集属性,而且您还没有定义一个,因此期望上述表达式返回的 DOM 元素将具有结果集属性是不合理的。至少,在尝试使用rs变量之前,您应该测试它的值是否适合您打算使用它的目的,例如

    if (rs && rs.moveFirst) {
      rs.moveFirst(); 

等等。

于 2012-04-17T05:37:28.140 回答
0
  • 内容应该放在<body>而不是放在<head>。唯一可以合理放置的东西<head>是脚本(不立即操作 DOM 的)、样式和杂项。关于您的页面的元数据。页面中出现的所有其余部分都应该在<body>

  • 虽然我最近知道id'ed 元素公开了一个与 id 同名的全局变量并引用它 ID 的元素,但您不应该以这种方式引用元素。你应该做一些document.getElementById()安全的事情。

  • 为了安全地执行脚本,<script>请在您的内容之后但在您关闭<body>元素之前放置标签。这确保您的脚本引用的所有元素都已经存在。


<!DOCTYPE html>
<html>
    <head>
       <!-- title, meta, styles, non-DOM scripts up here -->
    </head>
    <body>

        <!-- everything that appears in the page here -->

        <object id="login">
           <!-- ... --->
        </object>

        <script>
            //after the content, DOM manipulation scripts go here

            var login = document.getElementById('login');

            //now "login" is the object element

        </script>

    </body>
</html>
于 2012-04-17T05:10:37.767 回答