テキストボックスを動的に作成しましたが、それぞれにクリックでカレンダーを表示できるようにしたいと考えています。私が使用しているコードは:
$(".datepicker_recurring_start" ).datepicker();
すべてのテキストボックスにdatepicker_recurring_startというクラスがあるにもかかわらず、これは最初のテキストボックスでのみ機能します。
あなたの助けは大歓迎です!
テキストボックスを動的に作成しましたが、それぞれにクリックでカレンダーを表示できるようにしたいと考えています。私が使用しているコードは:
$(".datepicker_recurring_start" ).datepicker();
すべてのテキストボックスにdatepicker_recurring_startというクラスがあるにもかかわらず、これは最初のテキストボックスでのみ機能します。
あなたの助けは大歓迎です!
回答:
ここにトリックがあります:
$('body').on('focus',".datepicker_recurring_start", function(){
$(this).datepicker();
});
の $('...selector..').on('..event..', '...another-selector...', ...callback...);
構文手段が:
にリスナーを追加します...selector..
(body
イベントのために私たちの例では)..event..
(私たちの例では「フォーカス」)。セレクター...another-selector...
(.datepicker_recurring_start
この例では)に一致する一致するノードのすべての子孫に対して、イベントハンドラー...callback...
(この例ではインライン関数)を適用します。
見る http://api.jquery.com/on/、特に「委任されたイベント」に関するセクションをください
.datapicker()
テキストボックスがフォーカスを取得するたびに呼び出すのは不思議に思えますが、このアプローチには注意が必要です(私がこれを正しく読んでいると仮定します)。ただし、.datapicker()
再作成を試みる前に日付ピッカーが作成されているかどうかを確認するため、問題はないと思います。他のコードでは、この恵みがない場合があります。また、.on(のみjQueryの1.7で導入されました-ので、必ず正しいバージョンを使用している作る。
:not(.hasDatepicker)
以下の私にとってjqueryはうまくいきました:
「ボディ」をドキュメントに変更
$(document).on('focus',".datepicker_recurring_start", function(){
$(this).datepicker();
});
おかげskafandri
注:各フィールドでIDが異なることを確認してください
スカファンドリ+1によるすばらしい回答
これはhasDatepickerクラスをチェックするために更新されました。
$('body').on('focus',".datepicker", function(){
if( $(this).hasClass('hasDatepicker') === false ) {
$(this).datepicker();
}
});
$('body').on('focus',".datepicker:not(.hasDatepicker)", function(){$(this).datepicker();});
ますか?
.date-picker
クラスを持つ要素にまだクラスがないことを確認してくださいhasDatepicker
。その場合、で再初期化しようとしても$myDatepicker.datepicker();
失敗します!代わりに、あなたがする必要があります...
$myDatepicker.removeClass('hasDatepicker').datepicker();
あなたは実行する必要があります .datepicker();
他のテキストボックス要素を動的に作成した後でもう一度ます。
DOMに要素を追加する呼び出しのコールバックメソッドでそうすることをお勧めします。
したがって、JQuery Loadメソッドを使用してソースから要素をプルし、それらをDOMにロードするとします。次のようにします。
$('#id_of_div_youre_dynamically_adding_to').load('ajax/get_textbox', function() {
$(".datepicker_recurring_start" ).datepicker();
});
動的要素の新しいメソッドはMutationsObserverです。次の例では、underscore.jsを使用して(_.each)関数を使用しています。
MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var observerjQueryPlugins = new MutationObserver(function (repeaterWrapper) {
_.each(repeaterWrapper, function (repeaterItem, index) {
var jq_nodes = $(repeaterItem.addedNodes);
jq_nodes.each(function () {
// Date Picker
$(this).parents('.current-repeateritem-container').find('.element-datepicker').datepicker({
dateFormat: "dd MM, yy",
showAnim: "slideDown",
changeMonth: true,
numberOfMonths: 1
});
});
});
});
observerjQueryPlugins.observe(document, {
childList: true,
subtree: true,
attributes: false,
characterData: false
});
これは私のために働いたものでした(jquery datepickerを使用):
$('body').on('focus', '.datepicker', function() {
$(this).removeClass('hasDatepicker').datepicker();
});
クラス.datepickerをJavaScript関数に追加して、入力タイプを動的に変更できるようにすることができます
$("#ddlDefault").addClass("datepicker");
$(".datepicker").datetimepicker({ timepicker: false, format: 'd/m/Y', });
@skafandriの回答を変更datepicker
して、.datepicker_recurring_start
クラスを持つすべての入力にコンストラクターを再適用しないようにしました。
HTMLは次のとおりです。
<div id="content"></div>
<button id="cmd">add a datepicker</button>
ここにJSがあります:
$('#cmd').click(function() {
var new_datepicker = $('<input type="text">').datepicker();
$('#content').append('<br>a datepicker ').append(new_datepicker);
});
これが実用的なデモです
これは私にとってJQuery 1.3で機能したものであり、最初のクリック/フォーカスで表示されています
function vincularDatePickers() {
$('.mostrar_calendario').live('click', function () {
$(this).datepicker({ showButtonPanel: true, changeMonth: true, changeYear: true, showOn: 'focus' }).focus();
});
}
これには、入力にクラス 'mostrar_calendario'が必要です
Liveは、これを「オン」に適合させる必要がある新しいバージョンのJQuery 1.3以降用です。
違いの詳細については、http://api.jquery.com/live/をご覧ください。
$( ".datepicker_recurring_start" ).each(function(){
$(this).datepicker({
dateFormat:"dd/mm/yy",
yearRange: '2000:2012',
changeYear: true,
changeMonth: true
});
});