2011-06-27 13 views
2
var input = document.getElementById('thumbimg'); 
      input.addEventListener('change', function() { $("input.imgcheck").attr("disabled", ""); }, false); 

このコードを使用して、ユーザーがアップロードするファイルを選択したときに送信ボタンを有効にします。 アップロードフィールド以上を追加したいのですが?すべてのアップロードフィールドが満たされている場合にのみ送信ボタンを有効にする方法を知る必要があります。何か案は?多くのアイテムにイベントリスナーを追加するには?

答えて

2

更新:

@Simeonは重要なコメントをしたし、彼は正しいです。この問題を解決するには、各フィールドの値を検査し、それが空であるかどうかを確認できます

var $fields = $('.thumbimg'), 
    $submit = $("input.imgcheck"), 
    numRequiredFields = $fields.length; // or 3 as per your comment (somewhere) 

function runOnChange() { 
    var $filledFields = $fields.filter(function(){ 
     return $(this).val() !== ""; 
    }); 
    if($filledFields.length >= numRequiredFields) 
     // all fields changed 
     // run logic here 
     $submit.attr("disabled", ""); 
    } 
    else { 
     $submit.attr("disabled", "disabled"); 
    } 
} 

$fields.change(runOnChange); 

が、私は、各変化にすべてのフィールドを検査避けることを望んだが、これは避けられないようです。


オリジナルの答え:

あなたはフィールドが変更されているのを追跡する必要があります。とにかくjQueryのを使用している場合

また
var numFields = $('.thumbimg').length, 
    changedFields = 0; 

function runOnChange() { 
    changedFields++; 
    if(changedFields >= numFields) { 
     // all fields changed 
     // run logic here 
     $("input.imgcheck").attr("disabled", ""); 
    } 
} 

$('.thumbimg').change(runOnChange); 

、その後、一貫して、スクリプト全体でそれを使用する:あなたは複数のファイルアップロードフィールドを持っている場合は、クラスではなく、IDを使用する必要があります。特にIE8以下では動作しないaddEventListenerは使用しないでください。 jQueryは、このブラウザの違いから抽象的なものです。

+0

?実行おかげdoes't $(「入力し、入力2」)。変更(機能(... ように。:) –

+0

ユーザーが変更された場合のようにファイルを何回か選択すると、ファイルが変更されるたびに 'change'イベントが実行されるので、不正な結果が生成されます – Simeon

+0

@Simeon:True。良い点。私の答えを更新しました。 –

4

一方では、より一般的なセレクタを使用することができます。例えば:

$(".mytest").change(function() { $(this).attr("disabled", ""); } ; 

は、クラスmytestが含まれているすべての要素にイベントを適用します。

一方、delegate functionを使用できます。例えば:

$("#myContainer").delegate(".mytest", "change", function(){ $(this).attr("disabled", ""); }); 

クラスmytestを含むが、そのID myContainer主容器に属するすべての要素にイベントを適用します。

[EDIT]あなたの入力が満たされているかどうかを確認するには (上記のコードを変更し)、あなたはこのコードを使用することができます(右ここではテストしていない場合でも動作するはずです)name selectorを使用して:

if ($('input[disabled!=""]').length !== 0) { 
    // submit 
} 

よろしく、

マックス

+0

こんにちは、ご回答いただきありがとうございます。しかし、このコードでは、フィールドが変更された場合に関数が実行されるようにしていますが、すべてのフィールドが変更されている場合にのみ有効にしたいと考えています。 –

+0

各変更イベントのすべてのファイル入力の値をチェックするだけです。どれも空でない場合は、[送信]ボタンを有効にします。 –

+0

@Mohamedは言った:私は、なぜ私は私の答えは、しかし、私は、フォームを送信できるようになる前に、三つの画像をアップロードして、ユーザーを強制しようとしている、私はすでにjqueryのバリデータを使用してい – JMax

2

あなたは使用することができ

$('input').change(function() { 

}); 
すべての <input>要素に対して change()イベントに関数をバインドするには、

を使用します。次に、チェックを関数本体に追加し、検証が成功する場合は<input type="submit"/>を有効にします。

利用できる可能性のあるjQueryプラグインがいくつかあります(たとえば、jQueryFormValidtorなど)。jQuery Form Validation Pluginsは、開始するのに適しています。

+0

より良いあなたの質問に合わせて編集し、それはです送信ボタンを無効にします。 jqueryにAND条件がありますか?関数は三つの入力が変更されない限り、それは魔法のように動作 –

1

受け入れ答え はが正しく動作しませんでした を行います。ユーザが最初のファイルフィールドのファイル/イメージを何回か変更すると、送信ボタンが有効になります。

は、各入力が値を持っていることを確認しthis demoを見て、ください。コード:

var fileInputs = $('input[type=file]'); 
var submitBtn = $('input[type=submit]'); 
fileInputs.change(function() { 
    if(fileInputs.filter('[value=""]').length == 0) 
     submitBtn.removeAttr('disabled'); 
    else 
     submitBtn.attr('disabled', 'disabled'); 
}); 
関連する問題