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 に答える