2012-05-04 11 views
0

に私のソースコードをeventhandling上のオブジェクトの状態を取得します。ジャバスクリプト

<!doctype html> 
<html> 
<head> 
    <title>onload test</title> 
    <link type="text/css" rel="stylesheet" href="spot.css" media="screen" /> 

</head> 
<body> 
    <h1>Welcome Page</h1> 

    <script> 

     debugger; 
     function constructScripts(url, callBack) { 
      var script = document.createElement("script"); 
      script.type = "text/javascript"; 
      script.src = url; 
      document.getElementsByTagName("head")[0].appendChild(script); 
      if (script.readyState) { 
       script.onreadystatechange = function() { 
        if (script.readyState == "loaded" || script.readyState == "complete") { 
         script.onreadystatechange = null; callBack(); 
        } 
       }; 
      } 
      else { 
       script.onload = callBack; 
      } 
     } 


    </script> 
    <script> 
     debugger; 
     myCallBack = function() { 
      alert(this.src + "loaded"); 
     } 

     constructScripts("files1", myCallBack); 
     constructScripts("files2", myCallBack); 
     constructScripts("files3", myCallBack); 

    </script> 

</body> 
</html> 

this.srcは、ここに定義されていません。私はファイル名を読むことができるように、これはsrcプロパティを持つはずの 'スクリプト'オブジェクトでなければならないと思います。ここにいるのは誰ですか?また、ページソースを見ると、これらのスクリプトはheader()セクションには含まれていませんでした。それはなぜそうですか?ありがとう。

答えて

1

this.srcはここでは定義されていません。

それはすべきではない...それは先に定義されます。

script.src = url私はこれは私がファイル名を読み取ることができるように、そのsrcプロパティを持っていることになって「スクリプト」オブジェクトである必要がありますね。ここにいるのは誰ですか?

onload

時又はreadystatechangeイベントが発生

、また、私は、これらのスクリプトは、ヘッダ()セクションに含まれていないページのソースを表示するスクリプト要素。それはなぜそうですか?

JavaScriptで操作した後のライブDOMのシリアル化ではなく、ページソースを参照しているためです。

1

callBackという機能を呼び出すと、callBack(script)のようなスクリプトオブジェクトを渡します。 dinamicallyロードされた要素を表示しません

myCallBack = function (script) { 
     alert(script.src + "loaded"); 
    } 

ソースを表示などのcallBack機能を変更します。

0

プロトタイプを使用して機能を拡張する必要があります。編集したコード

<!doctype html> 
<html> 
<head> 
    <title>onload test</title> 
    <link type="text/css" rel="stylesheet" href="spot.css" media="screen" /> 

</head> 
<body> 
    <h1>Welcome Page</h1> 

    <script> 
     Element.prototype.MyMethod = function(){} 
     function constructScripts(url, callBack) { 
      var script = document.createElement("script"); 
      script.type = "text/javascript"; 
      script.src = url; 
      script.MyMethod = callBack; 
      document.getElementsByTagName("head")[0].appendChild(script); 
      if (script.readyState) { 
       script.onreadystatechange = function() { 
        if (script.readyState == "loaded" || script.readyState == "complete") { 
         script.onreadystatechange = null; 
       script.MyMethod(); 
        } 
       }; 
      } 
      else { 
       script.onload = callBack; 
      } 
     } 


    </script> 
    <script> 
     myCallBack = function() { 
      alert(this.src + "loaded"); 
     } 

     constructScripts("files1", myCallBack); 
     constructScripts("files2", myCallBack); 
     constructScripts("files3", myCallBack); 
    </script> 

</body> 
</html> 
+0

script.MyMethod(で

Element.prototype.MyMethod = function(){} 

ルック)。空のメソッドを呼び出し、何もしません。 Element.prototype.MyMethod –

+0

Owの意味は何ですか?私のブラウザでは問題ありません。 メソッドを拡張するためにプロトタイプと呼ばれています。 'document.createElement(" script "); '要素インスタンスを' script'が呼び出すと、私たちがMyMethodで拡張したElementオブジェクトを呼び出します。この関数の中では、callBackにscript.MyMethodを割り当てます。だから、 'script.MyMethod();'を 'script'で埋められたメソッドの中で呼び出すとき –