2013-04-21 44 views
0

我使用的DateTimePicker從http://trentrichardson.com/examples/timepicker/JQuery的的DateTimePicker變化分鐘/的maxDate導致無限循環

的問題是,我有一個起點和終點輸入字段。我不希望用戶可以選擇晚於開始日期字段的結束日期時間。

輸入的字段是這樣的:

<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 

該設置的的DateTimePicker JScript的:

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

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

而平變化的功能:

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

這是日期時間選擇器的問題還是我做錯了什麼?我不明白。

回答

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. 

等等,等等,等等。

[編輯建議周圍工作,同時適用於事件處理程序]

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 2013-04-21 14:56:55

+0

我通過使用布爾標誌解決了這樣的問題。像bCodeChange一樣。當您要修改另一個控件時,將其設置爲true,完成後將其設置爲false。然後在控件中,如果bCodeChange爲true,則退出,不要執行任何操作。但是,我找到了這種類似的東西。 – 2013-04-21 14:59:27

+0

確實聽起來很醜,但我不認爲這會奏效。因爲如果我只點擊1次日期,控制檯會返回3倍的功能控制檯日誌(http://i.imgur.com/0ydySEx.jpg) – Mathlight 2013-04-21 15:11:43