0

ぎこちないタイトルで申し訳ありません。ファイル拡張子をチェックして.mp3であることを確認するこのスクリプトがあります。ファイルの名前を取得するために使用するセレクターを克服するだけです。

例:

<form name="uploadsong1" action="" enctype="multipart/form-data" method="post" onsubmit="return ExtensionsOkay();">
<input name="song1" type="file" accept="*.mp3" />
etc..

そして、ExtensionsOkay は最初にフィールド値を取得します....これが問題であることはわかっています...

var fieldvalue = $(this).$('input[type=file]').value;

この問題は、アップロードを含む複数のフォームがあるという事実に起因しています。uploadsong1、uploadsong2 などのフォーム名...

したがって、私の推論では、フォームの名前である「this」を取得してから、ファイルである入力を取得する必要があります。(入力名は、フォーム名のように 1、2、3 などで増加します)。

フィールド値を取得するには、構文が間違っている必要があることを知っています...助けて..ありがとう!??

4

2 に答える 2

2

試す

var fieldvalue = $(this).find('input[type=file]').val();
于 2012-08-10T00:46:54.653 に答える
1

複数のフォームから同じ関数を呼び出したい場合は、インライン属性ExtensionsOkay()ではなく、jQueryでバインドする必要があります。onsubmit="..."(実際には、一般的にインラインイベント属性を避ける必要があります。)

$("form").submit(ExtensionsOkay);

次に、関数内thisで問題のフォームを参照するため、これを使用して、送信された特定のフォーム内のフィールドの値を取得します。以下は、内のフィールドを選択する2つの異なる方法ですthis

function ExensionsOkay(event) {
    var fieldvalue = $(this).find('input[type=file]').val();    
    // or
    var fieldvalue = $('input[type=file]', this).val();
    // and then if you want to prevent the form submitting:
    event.preventDefault();
}

jQueryが関数を呼び出すと、送信イベントに関連付けられたイベントオブジェクトがパラメーターとして渡されます(パラメーターの名前は関係ありませんが、ほとんどの人が使用します。eventまたはe、イベントオブジェクトを使用する必要がない場合は、パラメータを宣言する必要はありません)。

送信ハンドラーとして以外の場所からこの関数を呼び出す必要がない場合は、個別に定義してハンドラーとして関連付ける必要はありません。次のようにするだけです。

$("form").submit(function(e) {
    var fieldvalue = $(this).find('input[type=file]').val();
    // etc
    if (someCondition)
       e.preventDefault();
});

$("form")ページ上のすべてのフォームを取得することに注意してください。それらのいくつかだけを選択するには、関連するものにクラスを与えて、と言い$("form.classNameHere")ます。

于 2012-08-10T02:08:09.750 に答える