2016-01-11 3 views
0

У меня есть динамическое поле времени, в котором я использовал jQuery Datetime picker.jQuery datetimepicker не работает в первый раз

Для динамической инициализации я использовал этот код:

$("body").on("focus",".time-input",function(){ 
     $(this).datetimepicker(); 
}); 

Но это работает, когда я сосредотачиваюсь на второй раз.

Рабочая демонстрация будет отличной, если это возможно.

+0

попытка изменить '$ ("тело")' в '$ (документ)' –

ответ

3

Проблема заключается в том, что вы только создаете экземпляр выбора даты на элементе в первый раз, когда он фокусируется, а затем каждый раз после этого, что не является хорошей идеей. Вместо этого вам нужно только создать его экземпляр на элементе на нагрузке:

$(function() { 
    $('.time-input').datetimepicker(); 
}); 

Если .time-input элемента динамически добавляются в DOM (как я предполагаю, что данный делегированное обработчик события), то вам необходимо вызвать метод datepicker() на он в точке, в которую он добавлен в DOM. Например:

$.ajax({ 
    url: 'mypage.php', 
    success: function(data) { 
     if (data.prop) { 
      var $input = $('<input class="time-input" />').appendTo('#myForm'); 
      $input.datepicker(); 
     } 
    } 
}); 
+0

спасибо за ваш ответ, но нужно создавать динамические элементы с этим классом. –

+0

Я обновил свой ответ для вас. –

+0

Я пробовал это, но это работает только для статических элементов, а не для динамических элементов. –

1

Initialize datatimepicker на DOM элемента на документ готов

$(function() { 
    $("body").on("focus",".time-input",function(){ 
     $(this).datetimepicker(); 
    }); 
} 

Это позволит решить вашу проблему.

+0

Это точно так же, как то, что ОП имеет сейчас? –

0

Попробуйте «$ (document.body)» вместо «$ (body)».

$(document.body).on('focus', '.time-input', function(){ 
    $(this).datetimepicker(); 
}); 
2

Это происходит потому, что событие focusin используется плагин, чтобы показать DatePicker, лучшим решением является инициализация плагина вскоре после того, как входные элементы созданы, но если вы не можете сделать это, вы можете посмотреть на какой-то обходной путь, как

$("body").on("focus", ".time-input", function() { 
 
    if (!$(this).data('xdsoft_datetimepicker')) { 
 
    $(this).datetimepicker({ 
 
     onGenerate: function() { 
 
     if (!$(this).hasClass('initial')) { 
 
      $(this).addClass('initial').triggerHandler('open.xdsoft'); 
 
     } 
 
     } 
 
    }); 
 
    } 
 
}); 
 

 
$('button').click(function() { 
 
    $('#ct').append('<input class="time-input" />'); 
 
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.4.5/jquery.datetimepicker.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.4.5/jquery.datetimepicker.js"></script> 
 

 
<div id="ct"> 
 
    <input class="time-input" /> 
 
</div> 
 
<button>Add</button>

+0

https://jsfiddle.net/arunpjohny/oktecgyq/ –

0

Я думаю, вам нужно установить DatePicker после РОМ created.Here ваш код не работает, потому что JQuery datetimepicker не открыть вкладку WHe n инициализировано. и второй раз вы фокусируете свою работу, потому что она уже инициализирована.

так:

//here your dom should be updated you can console the length 
//console.log($('.time-input').length) 
$('.time-input').each(function(){ 
    $(this).datetimepicker(); 
}); 
+0

Спасибо за ваш ответ, но я не знаю, куда его поместить ... я не знаю, откуда его созданный –

+0

вы можете проверить, когда событие срабатывает, как после нажатия или фокус и т. д. –

+0

ok позвольте мне проверить –

Смежные вопросы