2017-11-12 9 views
-1
<!DOCTYPE html> 

<html> 
    <head> 
     <title>Greet</title> 
    </head> 
    <body> 
     <form id="demo"> 
       <input id="name" placeholder="Name" type="text"/> 
       <input type="submit"/> 
     </form> 
     <script> 
       function greet() 
       { 
        alert('hello, ' + document.getElementById('name').value); 
       } 
       document.getElementById('demo').onsubmit = greet(); 
     </script> 
    </body> 

form.onsubmit呼び出し関数はどのように機能しますか?

アラートは、私が提出した名前が表示されません。唯一hello,です。しかし、私がこのようなコードを書き直すなら、​​それはうまくいきます。しかし、なぜ? そして、これは同様に動作します:greetは関数自体を参照するので、それが動作します

<!DOCTYPE html> 

<html> 
    <head> 
     <title>dom0</title> 
    </head> 
    <body> 
     <form id="demo" onsubmit="greet()"> 
       <input id="name" placeholder="Name" type="text"/> 
       <input type="submit"/> 
     </form> 
     <script> 
       function greet() 
       { 
        alert('hello, ' + document.getElementById('name').value); 
       } 

     </script> 
    </body> 

答えて

1

理由があります。 greet()と書くと、括弧が関数を呼び出して出力を返すので、greet関数の出力を渡しています。

+0

申し訳ありませんが、私はあなたが言っていることを知っています。しかし、私はまだそれがどのように動作するのか理解していない?なぜgreet()は送信された値を与えないのですか? form - > onsubmit - > greet関数を呼び出す、正しい?私はPythonの背景を持っています。しかし、私はjavascriptの関数呼び出しがどのように動作するのか理解していないのですか? – Amy

+1

onsubmitに値を代入するとすぐに呼び出されるためです。したがって、値は空です。代わりに関数を渡すと、フォームを送信するときに呼び出されます(したがって、入力した場合)は値を持ちます。 –

+0

私はこの瞬間に迷っています。 JavaScriptの関数呼び出しについては混乱します。私はそれについて考えるために休息を取る必要があります。ありがとう。 – Amy

関連する問題