フォームの送信時にJavaScript関数を機能させようとしていますが、関数が実行されていないようです。誰か助けてもらえますか?
<html>
<head>
<script>
function upload(){
alert("I am an alert box!");
}
</script>
</head>
<body>
<form enctype="multipart/form-data" method="post" onsubmit="return upload();">
<input type="file" name="file">
<input type="submit" name="upload" value="Datei hochladen">
</form>
</body>
</html>
イベントハンドラーをフォーム要素にアタッチする場合、イベントハンドラーのスコープはウィンドウではなくフォームです
<form enctype="multipart/form-data" method="post" onsubmit="return upload(this);">
<script>
function upload(scope) {
console.log(scope); // The passed scope from the event handler is
} // the form, and not window
</script>
フォーム内の入力要素は、名前がキーであるフォームオブジェクトにプロパティとしてアタッチされているため、スコープがフォームであるイベントハンドラーでupload()
を呼び出すと、form.upload()
を呼び出すことと等しくなります。 、しかしフォームにはその名前の要素がすでにあるため、form.upload
はグローバルスコープのupload()
関数ではなくアップロードボタンです。
それを解決するには、関数または要素の名前を変更します
<html>
<head>
<script>
function upload(){
alert("I am an alert box!");
}
</script>
</head>
<body>
<form enctype="multipart/form-data" method="post" onsubmit="return upload();">
<input type="file" name="file">
<input type="submit" name="upload2" value="Datei hochladen">
</form>
</body>
</html>