2011-10-30 18 views
0

私は、jQueryを使用してテキストボックスの値を取得するためのフォームを用意しました。 document.readyイベントではなく機能外変数宣言の問題

var bdmm = $("#bdmm").val(); 

、および機能でそれを参照し、テキスト値がnull:問題は、私はこのような変数を宣言した場合です。しかし、関数内で宣言すると、うまく動作します。なぜこれはそうですか?

のjQuery:

これますませ作品:

$(document).ready(function() { 
     var bdmm = $("#bdmm").val(); 
     $('#submit').click(function(e){ 
       alert(bdmm); 
       e.preventDefault(); 
     }); 
    }); 

これは動作します:

$(document).ready(function() { 
      $('#submit').click(function(e){ 
       alert($("#bdmm").val()); 
       e.preventDefault(); 

           //OR 
          var bdmm = $("#bdmm").val(); 
          alert(bdmm); 
       e.preventDefault(); 

      }); 
     }); 

答えて

5

それは準備ができてDOMにすぐにテキストボックスの値を取得する最初の例では。既に値が入っているとうまくいきますが、実際にクリックイベントが発生した場合はre - フォームに問い合わせることはありません。おそらくあなたが望むものではないでしょう。

2番目の例では、実際にクリックイベントが発生したときにフォームフィールド値が取得されます。これはほぼ確実です。

+0

応答に感謝します。今、私は分かる。ですから、どのようにしてDOM上で変数を宣言し、関数内でそれを呼び出すことができますか?それとも私もそれをするべきですか? – input

+1

@ fuz3dイベントが発生したときに値が気になる場合は、そうしないでください。動的でないものについては、DOMで宣言する必要はありません*しかし、これは変数名を分離し、正しい値が関数内で使用されることを保証する1つの方法です([JavaScript closure](http:// blog .morrisjohns.com/javascript_closures_for_dummies))。 –

+0

私は参照してください。ありがとう。とても有難い。 – input

1

DOMが準備完了した直後に、おそらく$("#bdmm").val()が空であり、ユーザーがフォームを送信しようとしたときに既に値があります。

ので、フィールドが空であるコールバックの外に、コールバック内のフィールドには、すでにに充填されています。

また、(submitというIDを持つ要素がフォームの送信ボタンと異なる場合を除き)、フォーム要素のクリックイベントにバインドする代わりに、フォーム送信にバインドすることをお勧めします(jQuery's .submit())。これにより、柔軟性が増し、フォームが「入力」ボタンを押して送信されたときにも動作するはずです。

1

あなたはまた、(私はクラスにwarap好むが、それを簡単な例を維持するために、この時間を行うことはありません)グローバル変数を作成することができます。

var MyGlobal; 

$("myTextBox").change(function(){ 
    MyGlobal = $(this).val(); 
}); 

次に、あなたのコードは非常に動作するはずです...すべてがこのようになります:

var bdmm; 
    $(document).ready(function() { 
      $("myTextBox").change(function(){ 
       bdmm = $(this).val(); 
      }); 

      $('#submit').click(function(e){ 
        alert(bdmm); 
      }); 
     }); 

テキストボックスを編集すると値が再初期化されます。

http://api.jquery.com/change/