2011-01-11 8 views
0

私はdata-defaultsを使用しているこのフォームを持っていて、投稿前にそれらがクリアされていることを確認する必要があります。私はそれを行うジャックハンマーのスクリプトを持っていますが、あなたの誰かが私を巧みに助けてくれるか心配しています。複数のアイテムのjQuery ifステートメントを効率的に作成する

以下のスクリプトは動作し、フォームのすべての入力(デフォルトでは現在8つ)に書いていれば完璧です。私はいくつかのアプローチでフォームのすべての入力を選択しようとしましたが、何も動作していないようです。私は、私がここに来た理由である、私はできる私よりこれに近づくために多くの、よりスマートな方法があることを想像:)

$('#form_input_submit').click(function() { 
    if ($('#specific_input_id').val() == $('#specific_input_id').attr('data-default')) { 
     $('#specific_input_id').val(''); 
    } 
    return true; 
}); 
+0

これはいくつかの素晴らしい回答です。後でテストするために、それぞれを保存するつもりです。みなさん、stackoverflow rocksありがとう! –

答えて

1

これにより、デフォルトのデータ要素を持つすべての入力要素がチェックされ、送信前にこれらの項目がクリアされます。

$('#tour_submit').click(function() { 
    $('input[data-default]').each(function(index) { 
     if ($(this).val() == $(this).attr('data-default')) { 
     $(this).val(''); 
     } 
    }); 
}); 
+0

私はこの1つをポップしてすぐに動作させることができました。 –

+0

これはまた素晴らしい答えです。しかし、送信ボタンのクリックではなく、onSubmit(.submit()...)で同様のことを行うことができ、trueを返すだけです。 –

1

フォームですべての入力を取得し、それらを反復処理することができます。ラジオや入力を選択しているものがある場合は、少し変更する必要があります。あなたのform_input_submitボタンをクリックするだけで

$('#form_input_submit').click(function() { 
    $(this).closest('form').find('input').each(function() { 
     if(this.value == $(this).attr('data-default')) { 
      this.value = ''; 
     } 
    }); 
}); 

は、それが .closest()祖先 <form>を取得し、そこに意志 .find()すべて <input>の要素から。

次に、.each()を使用してコレクションを反復処理します。それは、サーバから来たよう$(this).attr('data-default')は、入力の初期値を表す場合

(またはその初期状態からどのような方法で)、あなたの代わりにこれを行うことができます:

if(this.value == this.defaultValue) { 
     this.value = ''; 
    } 
0

すべての入力項目を与えて試してみてくださいその後、クラス、あなたはすべての入力のためにダウンし、このようにコードを簡素化し、.val()に関数を渡すことができ、この

 
$('#form_input_submit').click(function() { 
    $('.inputs').each(function() { 
     if ($(this).val() == $(this).attr('data-default')) { 
      $(this).val(''); 
     } 
    }); 
    return true; 
}); 
+0

または、$(this).find( 'input')を指定するだけで、すべての入力にクラスを割り当てる必要はありません。 :) –

1

の操作を行います。

$('#form_id').submit(function() { 
    $(this).find('[data-default]').val(function(i, v) { 
     return $(this).data('default') == v ? "" : v; 
    }); 
}); 

また、送信ボタンのclickイベントに付けるのではなく、<form>submitイベントをリッスンします。

+0

javascriptに組み込まれているgetElementsByTagName関数を使用しているため、より高速な検索は$(this).find( 'input [data-default]')ですが、これは良い答えです。 [data-default]だけを検索すると、すべてのDOM要素を1つずつ調べ、data-default属性を持つ要素を選択して、セレクタが非常に遅くなるようにします。 –

+0

@ハイウェイ - 2つのこと、あなたは 'input '要素だけに制限しています、'