2013-04-21 4 views
0

Я использую DateTimePicker от http://trentrichardson.com/examples/timepicker/JQuery изменения DateTimePicker мин/результаты MaxDate в бесконечном цикле

Проблема в том, что у меня есть поле ввода начального и конечного. Я не хочу, чтобы пользователь мог выбрать конец datetime, а затем поле даты начала.

полей ввода выглядит следующим образом:

<input type="text" name="dateStart" id="dateStart" value="<?php echo $pageInfo['page_date_start'];?>" onChange="dateStartChange();" /> 
<input type="text" name="dateEnd" id="dateEnd" value="<?php echo $pageInfo['page_date_end'];?>" onChange="dateEndChange();" /> 
// Default date value = 0000-00-00 00:00:00 

JScript, что расстановок в DateTimePicker:

$('#dateStart').datetimepicker({ 
    showSecond: false, 
    timeFormat: 'HH:mm:ss', 
    dateFormat: "yy-mm-dd", 
}); 

$('#dateEnd').datetimepicker({ 
    showSecond: false, 
    timeFormat: 'HH:mm:ss', 
    dateFormat: "yy-mm-dd", 
}); 

И в OnChange функции:

function dateStartChange(){ 
    console.log("dateStartChange: " + $("#dateStart").val()); 
    $("#dateEnd").datepicker('option', 'minDate', $("#dateStart").val()); 
} 

function dateEndChange(){ 
    console.log("dateEndChange: " + $("#dateEnd").val()); 
    $("#dateStart").datepicker('option', 'maxDate', $("#dateEnd").val()); 
} 

Это прекрасно работает за исключением одного вещь. Если изменить дату, а затем нажмите на другом поле ввода и выберите тот же день, что приводит к бесконечному циклу, если я просматриваю журнал консоли: Console output...

И страница (хром) изменения к этому: Page outcome

Это проблема с сборщиком datetime или я делаю что-то неправильно? Я не понимаю.

ответ

1

Это, вероятно, рекурсии ....

When dateStart changes, you are modifying dateEnd. 
When dateEnd changes, you are modifying dateStart. 
When dateStart changes, you are modifying dateEnd. 
When dateEnd changes, you are modifying dateStart. 
When dateStart changes, you are modifying dateEnd. 
When dateEnd changes, you are modifying dateStart. 
When dateStart changes, you are modifying dateEnd. 
When dateEnd changes, you are modifying dateStart. 

и т.д., и т.д., и т.д.

[Edit предложил работу вокруг, применяются как обработчики событий]

var bCodeChange = false; 

function dateStartChange() 
{ 
    if (bCodeChange == true) 
     return; 
    else 
     bCodeChange = true; 

    console.log("dateStartChange: " + $("#dateStart").val()); 
    $("#dateEnd").datepicker('option', 'minDate', $("#dateStart").val()); 

    bCodeChange = false; 
} 
+0

сейчас вы говорите это, становится ясно: D 1 Вопрос, как вы думаете, что я могу предотвратить рекурсию с этим тогда? – Mathlight

+0

Я исправил проблемы, подобные этому, используя флагов boolean. Что-то вроде bCodeChange. Когда вы собираетесь изменить другой элемент управления, установите его значение true, когда это будет сделано, установите значение false. Затем в элементе управления, если bCodeChange истинно, просто выйдите, ничего не делайте. Тем не менее, я нахожу этот вид клочья. –

+0

Звучит уродливо, но я не думаю, что это сработает. Потому что, если я просто нажму 1 раз на дату, консоль вернет 3 раза журнал функциональной консоли (http://i.imgur.com/0ydySEx.jpg) – Mathlight

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

  • Нет связанных вопросов^_^