1

私は次のフォームを持っています:

<form id="vintro-upload-form" action="{url}?nexturl={nextUrl}" method="post" enctype="multipart/form-data" >
<input name="file" type="file"/>
<input name="token" type="hidden" value=""/>
<input value="Upload Video File" type="button" name="submit" onClick="checkFile()" class="button" />
</form>

および次のJavaScript:

<script>
function checkFile(){
 var fileVal = document.forms["vintro-upload-form"].elements['file'].value;
 //RegEx for valid file name and extensions.
 if(fileVal != ""){vintro-upload-form.submit();} 
 else {alert('Please select the Video file.');}
}
</script>

何が機能しますか?fileValの割り当ては適切です。送信が機能していません。デバッガーを確認すると、「vintroが未定義です」と表示されます。

私は何を試しましたか?次の例とコード:

成功しませんでした。このフォームでもいくつかのjQuery(別の.jsファイル内)が実行されており、ハイフンでつながれた名前で正しく機能します。

送信呼び出しが機能しないのはなぜですか?

編集:私はdocument.getElementById('vintro-upload-form').submit();この質問への回答で提案されているように使用しようとしましたが、これはまだ失敗しています。私の(Firefox)デバッガーはそれが関数ではないと言っています。Chromeのデバッガーはもう少し説明しました:「キャッチされていないTypeError:オブジェクト#のプロパティ'submit'は関数ではありません」(それまでの間、これをGoogleに送信します)。

私の評判は100未満なので、わかりました。それで、私は間違った質問をしていました。

私が見つけた答えは次のとおりです。 外部PHPファイルで定義されたフォームであるJavascriptを介したフォームの送信

受け入れられた回答も確認してください。

4

3 に答える 3

7

このJavaScript:

document.forms["vintro-upload-form"].elements['file'].value

フォームタグのNAME属性を探しています:

document.forms[{form_name}].elements[{field_name}].value

あなたはただIDを持っています。IDの値をNAMEにコピーすれば完了です。

ただし、document.getElementById()は、プレーンJavaScriptでこれを行うための推奨される最新の方法です。

ただし、「送信」という名前の送信/ボタンを設定することはできません。

そうしてJavaScriptのsubmit()関数を呼び出すと、競合が発生します。

于 2012-04-25T20:31:12.920 に答える
1

必要なdocument.getElementById('nameofform').submit()のは、名前よりもIDで要素を見つける方が簡単なことです。

別の方法は、名前で要素を取得することです。これはdocument.getElementsByName('nameofform')...で実行できますが、配列を返すため、その配列を反復処理して、アップロードする必要のあるフォームを見つける必要があります。したがって、IDを使用する必要があると思います。

于 2012-04-25T20:11:32.183 に答える
0

フォームの名前に、JavaScript識別子で使用できない文字(ダッシュ)が含まれています。document.getElementById('vintro-upload-form').submit();代わりに使用してください。

于 2012-04-25T20:12:33.243 に答える