0

私はこのJavascript/JQueryコードを持っています:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type="text/javascript">

    name = $("#name").val();

    alert("Name: " + name);

</script>

そしてこのHTML:

<form name="report" action="send.php" method="post">

    <input type="text" name="name" id="name" value="Senna" />
    <input type="submit" value="Send" />

</form>

ページが読み込まれると、「Name:Senna」ではなく「Name:undefined」が表示されます。

誰かが私が期待される結果を得るのを手伝ってくれる?

4

3 に答える 3

2

コードをDOM対応ハンドラー内に配置する必要があります。

$(function() {
    var name = $("#name").val();
    alert("Name: " + name);
});

それ以外の場合は、まだロードされていない要素で作業を試みています。

于 2012-07-03T21:55:58.327 に答える
2

JavaScriptは、ページがレンダリングされたときにコードを実行するためのロードイベントを提供しますが、このイベントは、画像などのすべてのアセットが完全に受信されるまでトリガーされません。ほとんどの場合、DOM階層が完全に構築されるとすぐに、スクリプトを実行できます。.ready()に渡されたハンドラーは、DOMの準備ができた後に実行されることが保証されているため、通常、これは他のすべてのイベントハンドラーをアタッチし、他のjQueryコードを実行するのに最適な場所です。

ページが読み込まれたら、関数を実行するように指示する必要があります。現在、定義しているだけで、いつ実行するかをデカールしていません。

$(document).ready(function(){
    name = $('#name').val();
    alert('Name: ' + name);
});

または:

$(function(){
    name = $('#name').val();
    alert('Name: ' + name);
});
于 2012-07-03T21:57:29.703 に答える
1

document.readyコールバックが必要です。

次のような関数内にコードを配置します-

$(function(){
  // code goes here
});

このコールバックを使用して、jQueryとDOM全体がいつロードされるかを知る必要があります。そうして初めて、jQueryコードを使用してマークアップとCSSの操作を開始できます。


上記のコードは実際にはこれの省略形です-

$(document).ready(function(){
  // code goes here
});

これは.ready()メソッドを使用します-http://api.jquery.com/ready/関数
の説明からの抜粋-.ready()

...渡されるハンドラーは.ready()、DOMの準備ができた後に実行されることが保証されているため、通常、これは他のすべてのイベントハンドラーをアタッチし、他のjQueryコードを実行するのに最適な場所です。..。

強調を追加

于 2012-07-03T21:56:28.210 に答える