複数の入力、選択ボックス、およびテキストエリアを含むフォームがあります。必須として指定したすべてのフィールドに値が入力されるまで、送信ボタンを無効にしたいと考えています。そして、それらがすべて入力された後、WAS フィールドがユーザーによって消去された場合、送信ボタンを再び無効に戻したいと思います。
jQueryでこれを達成するにはどうすればよいですか?
複数の入力、選択ボックス、およびテキストエリアを含むフォームがあります。必須として指定したすべてのフィールドに値が入力されるまで、送信ボタンを無効にしたいと考えています。そして、それらがすべて入力された後、WAS フィールドがユーザーによって消去された場合、送信ボタンを再び無効に戻したいと思います。
jQueryでこれを達成するにはどうすればよいですか?
私の最初の本能は、ユーザーが入力の変更を開始するたびに関数を実行することだと思います。このようなもの:
$('#submitBtn').prop('disabled', true);
$('.requiredInput').change(function() {
inspectAllInputFields();
});
次に、すべての入力をチェックし、検証された場合は送信ボタンを有効にする関数を作成します...
function inspectAllInputFields(){
var count = 0;
$('.requiredInput').each(function(i){
if( $(this).val() === '') {
//show a warning?
count++;
}
if(count == 0){
$('#submitBtn').prop('disabled', false);
}else {
$('#submitBtn').prop('disabled', true);
}
});
}
入力値が保存されている場合、または他のコードがデータを入力している場合でも、正しく機能するように、ページの読み込み時に inspect 関数の呼び出しを追加することもできます。
inspectAllInputFields();
これがお役に立てば幸いです、〜マット
ここに包括的なものがあります。理由は次のとおりです。
$(document).ready(function() {
$form = $('#formid'); // cache
$form.find(':input[type="submit"]').prop('disabled', true); // disable submit btn
$form.find(':input').change(function() { // monitor all inputs for changes
var disable = false;
$form.find(':input').not('[type="submit"]').each(function(i, el) { // test all inputs for values
if ($.trim(el.value) === '') {
disable = true; // disable submit if any of them are still blank
}
});
$form.find(':input[type="submit"]').prop('disabled', disable);
});
});
送信ボタンに無効属性を設定します。お気に入り:
$('input:submit').attr('disabled', 'disabled');
フォーム フィールドで .change() イベントを使用します。
私からのアイデア:
少し異なるアプローチを取り、jquery の検証http://docs.jquery.com/Plugins/validationを使用することをお勧めします。あなたが提案している戦術は、セキュリティホールになりがちです。ユーザーは簡単に firebug を使用してそのボタンを有効にし、フォームを送信できます。
jquery 検証の使用はクリーンであり、送信時に必要に応じて必須フィールドの下にエラー メッセージを表示できます。
ボタンを無効にして開始します(明らかに)。onkeyup
必要な各テキスト入力、および選択ボックス (および任意のラジオ ボタン/チェックボックス) にイベントをonchange
バインドし、イベントがonclick
発生したときに、必要なすべての入力が入力されているかどうかを確認します。その場合は、ボタンを有効にします。そうでない場合は、無効にします。
ただし、ここに 1 つの抜け穴があります。ユーザーはonkeyup
、マウスを使用してテキストを「切り取る」か、削除する前に削除/バックスペース キーを押しながらボタンをクリックすることで、イベントをトリガーせずにテキスト フィールドの値を削除できます。
どちらかで秒を回避できます
onkeydown
問題がないかどうかを確認しますonkeyup