2012-04-26 7 views
0

jQuery 1.4.4を使用しています。idによって動的にdatepickerを追加しようとしています。コードは次のとおりです。jQueryを使用してidで動的にdatepickerを追加する方法

$(function() { 
    $('#ListTableBody').find('input[id^="PickDate."]').each(function() { 
     alert(this.id); 
     $(this.id).datepicker(); 
    }); 
}); 

私は動的にIDを動的に生成するテーブルを使用しています。上記のコードはIDのそれぞれを見つけ、アラートを使って検証しました。私がループすると、this.idは正しいIDと入力を持っていることを示していますが、何らかの理由でdatepickerが機能しません。また、私は間違いを起こさない。

私がここで間違っていることは何ですか?

答えて

3

はこれを試してみてください。

$('#ListTableBody').find('input[id^="PickDate."]').each(function() {     
    $(this).datepicker(); 
}); 

id属性を取得する必要はありません。thisをjQueryオブジェクトim中位

+0

はい、うまくいきました。私は今、スマートに感じることはありませんが、助けてくれてありがとう! –

1

あなたはそれのためのIDを使用する場合は、このような何かをする必要があるでしょう:

$("#"+this.id).datepicker(); 

しかし、それだけで行うには非常に簡単です:

$(this).datepicker(); 
0

は、あなたがdatepickerとして使用する必要がある各コントロールに同じクラスを入れることができます。

<script> 
     $(function() { 
      $('.class').datepicker(); 
     }); 

    </script> 
+0

あなたはあまりにも多くの '});' – ManseUK

+0

なぜですか?、のみ必要です – jairoortiz

1

代わりにクラスを使用します。 IDはドキュメントごとに1回のみ使用されるはずで、IDセレクタにeach()を適用しているということは、ページに複数のインスタンスが存在する可能性があることを示しています。

代わりに、.datepickerなどのわかりやすいクラス名を選択します。

$(document).ready(function() { 
    $('input.datepicker').datepicker(); 
}); 

each()ループの必要性を全くあなたが何かをやっていない場合:利点は、あなたが、あなたのページに複数のを持っていないことができ、また、そのようなような式でそれらにdatepickersを初期化することができます。のような特定の領域内の入力に日付ピッカーを制限したい場合は(クラス名の使用を助言しますので、希望すれば複数のページを持つことができます)、セレクタを変更してください:

$(document).ready(function() { 
    $('#ListTableBody').find('input.datepicker').datepicker(); 
}); 
+0

セレクタはOPを使用して開始セレクタです - これを使用しても問題ありません.... – ManseUK

+0

IDは一意ではないので、そこの問題。クラスがjQueryの基本原則であると私は同意します。だから今はクラスを使って時間があるときにIDとリファクタを使います。非常に良い答え! –

+0

私はStruts2を使用していますので、タグに関連付けられたクラスを取得するためにcssClass属性について調べる必要がありましたが、それははるかにクリーンなソリューションです。優れた例! –

関連する問題