2011-08-24 5 views
1

テキストボックスとそれに対応するチェックボックスのリストがあります。私はチェックボックスがユーザによってチェックされているそれらのテキストボックスのみを可視にしたい。これどうやってするの?対応するチェックボックスがチェックされている場合、テキストボックスが表示されます。

<input type="text" name="album_text[]" id="album_text" class="album_text" /> 
<input type="text" name="album_text[]" id="album_text" class="album_text" /> 
<input type="text" name="album_text[]" id="album_text" class="album_text" /> 

<input name="album_checkbox[]" type="checkbox" id="album_checkbox" value="' . $res. '"> 
<input name="album_checkbox[]" type="checkbox" id="album_checkbox" value="' . $res. '"> 
<input name="album_checkbox[]" type="checkbox" id="album_checkbox" value="' . $res. '"> 

は今のところ、更新ボタンをクリックするだけで、すべてのテキストボックスにかかわらず、チェックボックスの目に見えるようになる:

$("#album_edit").click(function() { 


        $(".album_text").show(); 



     }); 

EDIT: texboxesとチェックボックスは、実行時に動的に生成されます。

+0

最初の問題は、複数のオブジェクトに同じIDを使用しているということです。どちらがユニークでなければなりません!もしあなたが好きなら、.eq()プロパティを使うことができますので、テキストinput.eq(0)をクリックすると、チェックボックスinput.eq(0)が見えます。 – Tumharyyaaden

+0

たとえそれがあっても、私が下で提供した例は、うまくいくでしょう!しかし、ur queをもう一度読むと、テキスト入力フィールドとチェックボックスを入れ替えたかもしれませんが、クラスを変更するだけで、逆の作業をする必要があります! – Tumharyyaaden

答えて

1

ここで働いている例、http://jsfiddle.net/JmqLH/

HTML:

<span class='textinput'> 
    <input type="text" name="album_text[]" id="album_text1" class="album_text" /> 
    <input type="text" name="album_text[]" id="album_text2" class="album_text" /> 
    <input type="text" name="album_text[]" id="album_tex3t" class="album_text" /> 
</span> <br> 
<span class='chkbx'> 
    <input name="album_checkbox[]" type="checkbox" id="album_checkbox1" value="' . $res. '"> 
    <input name="album_checkbox[]" type="checkbox" id="album_checkbox2" value="' . $res. '"> 
    <input name="album_checkbox[]" type="checkbox" id="album_checkbox3" value="' . $res. '"> 
</span> 

JS:

$('span.chkbx input').hide(); 

$('.album_text').click(function(){ 
    var indexme = $(this).prevAll().length; 
    $('.chkbx input').eq(indexme).show(); 
}); 

アップデート1:http://jsfiddle.net/JmqLH/1/

アップデート2:http://jsfiddle.net/JmqLH/2/はJSに二つの入力種類をスワップ...

更新3:http://jsfiddle.net/JmqLH/3/ HTMLの2つの入力グループを入れ替えました...

+0

テキストボックスとchecboxは実行時に生成されます。 – input

+0

更新されたjsfiddleを確認してください。http://jsfiddle.net/JmqLH/1/ – Tumharyyaaden

+0

@tunharyyaaden、これは理想的には動作するはずですが、何とか動作しません。ユーザーが更新したいデータのチェックボックスをチェックしてEDITボタンをクリックすると、テキストボックスが表示されます。 – input

0

まず、複数の要素に同じidを使用しないでください。代わりにclassセレクタを使用できます。 album_text_1album_checkbox_1のような対応するidを割り当てることができます。これにより、次のステップがエラーを起こしにくくなります。

var checkboxes = $('.album_checkbox'), 
    textFields = $('.album_text'); 

checkboxes.change(function() { 
    // Eg. replace album_checkbox_1 with album_text_1 
    var textField = $('#' + this.id.replace(/^_checkbox_/, '_text_')); 
    if(this.checked) { 
     textField.show(); 
    } else { 
     textField.hide(); 
    } 
}); 

あなたはユニークなid Sを使用することはできません(あなたがマークアップのコントロールを持っていない)場合は、代わりに.index().eq()を使用することができます。チェックボックスがcheckedある場合

第二に、あなたがチェックする必要がありますこれは、要素の各セットの順序が一致していると確信している場合のみです。だから、上記のようなコードになりますが、と6行目の交換:あなたは、「album_text」$(あるとき、それらのすべてが同じIDとclass..soを持っているので、

var textField = textFields.eq(checkboxes.index(this)); 
+0

texboxとチェックボックスは実行時に動的に生成されるので、固有のIDを与えることはできません。 'eq'と' index'を使ってみましたが、 'id'を' class'に変更しましたが何も起こりません。テキストボックスは表示されません。 – input

+0

私は、テキストボックスとチェックボックスへのforeachループに動的に自動インクリメントを追加しました。そして、元々投稿したように行6を変更しましたが、何も起こりません。それは何のエラーもスローされません。 – input

0

ははい、彼らは、意志)、すべてのテキストボックスが渡され、表示されます。テキストボックスをチェックボックスに一意に結び付ける/特定するためのメカニズムを見つけて、そのユニークなID /クラスをjqueryコードで使用してテキストボックスを表示する必要があります。