3

ファイルの先頭に次の行がある場合、.jsそれを使用する関数を呼び出すと、どうしてclickButtonそうなるのnullでしょうか。

HTMLで

<input type="text" onkeydown="toggle()" id="txt1" />
<input name="aButton" id="aButton" type="button" value="ButtonVal" />

JSで

//global variables
var clickButton = document.getElementById("aButton")
var state = false

function toggle()
{
  if(!state)
      /*here it says clickButton is null but if I put var clickButton = 
      document.getElementById("aButton") in this scope it works*/
      clickButton.disabled = true
  else
    clickButton.disabled = false
}

また、nullとundefinedの違いは何ですか(私がチェックする方法ではありません)?nullが宣言されているが、値が割り当てられていないのに、undefinedが宣言されていないということですか?

つまり、この質問では、「プログラマーが何も割り当てていないプロパティは未定義になりますが、プロパティをnullにするには、nullを明示的に割り当てる必要があります」ということです。しかし、私が明示的にnullを割り当てたことは決してないことを保証できます。

4

3 に答える 3

2

これは、document.getElementById("aButton")がnullを返していることを意味します。指定されたIDの要素がdomで使用できないか、domの準備がまだできていません。https: //developer.mozilla.org/en-US/docs/DOM/document.getElementByIdを参照してください。

nullと未定義の場合-マウスオーバーイベントとmouseenterイベントの違いは何ですか?を参照してください。

于 2013-02-21T21:05:50.867 に答える
0

最初の質問

  • htmlファイルに次のようなマークアップがあることを確認してください。

     <input name="aButton" id="aButton" type="button" value="ButtonVal" />
    
  • DOMの準備ができたら、必ず関数を呼び出してください。したがって、HTMLページの下部にjsのリンクを配置します。またはこの中:

     if (document.readyState === "complete") { //codehere }
    

2番目の質問

JavaScriptでは、undefined変数は、宣言されていない、または値が割り当てられていない変数です。var aたとえば、宣言するとundefined、値が割り当てられなかったため、aはになります。

ただし、割り当てa = nullた場合、 anullになります。JavaScriptでは、nullはオブジェクトです(typeof null信じられない場合はJavaScriptコンソールで試してください)。これは、それが値であることを意味しnullます(実際にundefinedは値です)。

これらの演算子を使用して、未定義のnullをチェックできます。例えば:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

もっと?JavaScriptのnullとundefinedの違いは何ですか?

于 2013-02-21T21:17:49.103 に答える
-1

undefinedとnullは確かに2つの異なるタイプです。nullはオブジェクトであり、宣言されているがnull値を提供している変数を指しますが、宣言されていない変数では未定義であり、それ自体はオブジェクトではありません。

私の推測では、DOMの準備が整うのを待っていないので、clickButton変数が要素を取得するのが早すぎて、nullを取得しようとしています。document.readyまたはwindow.onloadでラップして、DOMの読み込みが完了したときに実行されるようにしてください:-)。

window.onload(function() {
    var clickButton = document.getElementById("aButton");
});
于 2013-02-21T21:12:49.853 に答える