2011-11-11 11 views
2

私はチェックボックスとテキストエリアの負荷のあるフォームを持っています。チェックボックスをオンにすると、関連するテキストエリアが表示されます。これはうまくいきます。

しかし、特定のクエリが行われた場合、テキストエリアにデータを取り込むための情報を取得するデータベースを呼び出しています。次のようにHTMLの例は次のとおりです。データをテキストエリアにロードされている場合は

<li> 
    <input type="checkbox" id="changes-trigger" /> 
    <label for="changes-trigger">Changes</label> 
    <textarea id="changes" name="changes" rows="6" cols="40"><?php echo $report['changes']; ?></textarea> 
</li> 

、私は、チェックボックスがチェックされ、テキストエリアが表示されるためにすることにしたいです。私は、具体的idを使用してテキストエリアを対象とした場合、私は、ページの読み込みに望むように、私が行うことができます:私が言ったように

if($('#changes').val()) { 
    $('#changes-trigger').prop('checked','true'); 
    $('#changes').show(); 
} 

しかし、私はこれらの負荷を持っており、個々の1をコードする必要はありません。 これは私の望むとおりに行うだけでなく、外部の.jsファイルの残りを分割します。誰かが次のことがうまくいかない理由を助言できますか?

if($('textarea').val()) { 
    $(this).siblings('input').prop('checked','true'); 
    $(this).show(); 
} 
+0

の特定の値を取得するために.each()メソッドを使用する必要がありますか? –

答えて

2

私は、このようにすべてのtextarea Sを反復処理するeachを使用することをお勧めします:

$('textarea').each(function() { 
    if($(this).val()) { 
     $(this).siblings('input').prop('checked','true'); 
     $(this).show(); 
    } 
}); 
+0

そうですね、それは完全に意味を成しています。誰もが同じことを言っていますが、最初にそこに着いたのです。すばらしい、ありがとう。 –

2

$('textarea').val()は、ページ上のすべての 'テキストエリア' 要素を参照しようとします -

$('textarea').each(function() { 
    if($(this).val()) { 
     $(this).siblings('input').prop('checked','true'); 
     $(this).show(); 
    } 
}) 

これは、ページ上のすべてのテキストボックスをループし、ロジックをそれぞれに適用する必要があります。

+0

鮮やかな、あなたの答えのおかげで –

2

あなたは、あなたのifでそれらを参照したため、ページ内のテキストエリアのセットを参照することを期待しています。それは実行されません。機能内では変更されません。

代わり

$('div#abc textarea').each(function() { 
    if($(this).val()) { 
     $(this).siblings('input[type=checkbox]').prop('checked','true'); 
     $(this).show(); 
    } 
}); 

を行うことができます。私はあなたが指定されたdivまたは類似の(ここではid abc)内のテキストエリアのみを検索し、正しいタイプの入力だけを更新することをお勧めします!

+0

右、それを得た。異なるタイプの入力について心配する必要はありませんが、テキストエリアの兄弟として存在することは決してありませんが、私はあなたの要点、おかげです。 –

2

コンテキストがwindowオブジェクトを指しているのは、イベントコールバックまたは.callまたは.applyを使用して変更されていない限りです。あなたのページにあなたのすべてのテキストエリアの配列を返します​​3210セレクタを使用して

var $textarea = $('textarea'); 
if($textarea.val()) { 
    $textarea.siblings('input').prop('checked','true'); 
    $textarea.show(); 
} 
+0

これは素晴らしいです、ありがとう –

2

:代わりに

は、これを使用しています。これに.val()を適用すると、DOMツリーの最初のテキストエリアの値が返されます。フィドルは証明する:http://jsfiddle.net/sc4vc/

あなたはあなたのコードをラップループルックスをしてどのように各textarea

$('textarea').each(function() { 
    if ($(this).val()) { 
     $(this).siblings('input').prop('checked','true'); 
     $(this).show(); 
    } 
} 
+0

答えとフィドル –

関連する問題