2009-08-26 7 views
3

だったか理解していない:Javascriptの問題は、問題がHTMLのheadセクションでは

<script type="text/javascript" src="Scripts/editScripts.js"></script> 

だけ</body>タグ(終了タグ、htmlページの一番下)を超えます。また:

<script type="text/javascript">if(document.getElementById)initialize();loadEvents();</script> 
    </body> 
</html> 

editScripts.jsファイルで:これは、古いコードで、これはを働いていなかったとき、それがあった方法です

/*global document,addFileInput*/ 
function loadEvents() { 
    var a = document.getElementById('addField'); 
    a.onclick = addFileInput; 
} 
var upload_number = 2; 
function addFileInput() { 
    var d = document.createElement("div"); 
    var file = document.createElement("input"); 
    file.setAttribute("type", "file"); 
    file.setAttribute("name", "addFile[]"); 
    file.setAttribute("size", "35"); 
    file.setAttribute("class", "file"); 
    file.setAttribute("id", "addFile"+upload_number); 
    d.appendChild(file); 
    document.getElementById("moreUploads").appendChild(d); 
    upload_number++; 
} 

これは動作しないでしょう。私はこれでフッターのjavascriptを置き換えます。
これは私が期待するように動作する新しいコードです。

<script type="text/javascript">if (document.getElementById)loadEvents();</script> 

そして今、それは仕事をして...私はそう丁重、それはそれはに言及していた機能が存在しないにもかかわらず、その関数呼び出しを残してどのように混乱物事を考え表示されません。

答えて

1

このような機能がないため、ブラウザは「初期化」機能を呼び出そうとするとエラーを報告していました。したがって、 "loadEvents"と呼ばれる次の行は実行されません。この例を参照してください:この例では

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>JS Error Test</title> 
    </head> 
    <body> 
     <script type="text/javascript"> 
      if(document.getElementById) { 
       initialize(); 
       alert("You shouldn't see me!"); 
      } 
     </script> 
    </body> 
</html> 

を、私は「初期化」機能を宣言していないため、アラートボックスは表示されませんと、ブラウザはJSのエラーを報告します。ただし、「初期化」機能を削除すると、アラートボックスが表示されます。

これは、Javascriptエラーの原因を取り除いて問題を解決した方法です。

1

おそらく、ドキュメントロードイベントでスクリプトを呼び出していないためです。だから、の前にあなたのスクリプトをあなたのdomに完全にロードしても、どれもうまくいきませんでしたが、DOMロード後に呼び出すときに動作します。

このすべての正しい修正が文書に完全にロードされた後、あなたのスクリプトを呼び出し、または少なくともボディonloadイベントからしなければならない

:上で実行するためにあなたがしたいすべてのスクリプトを追加し

<body onload="initScripts()"> 

そして、 initScripts関数のページ読み込み。

も、はるかに優れたjqueryのを使用して、たとえば、これを行う方法、および/またはこれを読んありますunbracketed if声明の中でhttp://onlinetools.org/articles/unobtrusivejavascript/chapter4.html

+0

もう一度、古いものと新しいjavascriptの両方をhtmlの下に置きます。違いは、1つの関数呼び出しを省いたことです。 – KdgDev

4

、唯一の最初の文は、条件付きです。インデントに関係なく、それに続くすべての文は無条件でです。

このように、第1の例では、無条件でloadevents()が実行されます。

0

あなたはこう言っています。「その関数呼び出しが存在しないにもかかわらず、その関数呼び出しを放棄する方法はわかりません。それはあなたの質問の残りの部分と矛盾しています。これは、コールを混乱させることが混乱していることを意味します。しかし、私が引用しているテキストは正しい記述だと思う。

ここは本当の答えです。古いコード:getElementsByIdが定義されていない場合

if(document.getElementById)loadEvents(); 

がloadEventsを呼び出すことはありません。すべてのブラウザで定義されているわけではありません。

新しいコードではなく、関数呼び出しを省略するだけでなく、セマンティクスも変更されます。

if(document.getElementById)initialize();loadEvents(); 

は、常にloadEventsを呼び出します。そのため、常に何をしたいのですか。

+0

実際には、古いものと新しいものに切り替えました。 – KdgDev

+0

質問のあいまいさに間違った修正が加わったとしたら(実際には*現在は問題の状態として残しておきますが、古いものはそうではありません。 – redtuna

+0

誰かが一緒に来て説明しました。私はそれを正解と記しました。まだ興味があるなら、読んでみてください。 – KdgDev