2011-12-27 93 views
3

我遇到了jQuery UI的Datepicker導致Internet Explorer(版本8和9,也許是其他人)有時(但並非總是)崩潰的問題。 IE瀏覽器在頁面加載時或在用日期選擇器字段擺弄後大約有25%的時間崩潰。這可能是也可能不是特定於Windows 7.我可以使用從1.6.2到1.7.1的各種不同版本的jQuery來重現問題。jQuery UI Datepicker導致Internet Explorer崩潰

http://jsfiddle.net/wLW8D/

<script> 
    $(function() { 
     $('#someDate').datepicker(); 
    }); 
</script> 

<input type="text" name="someDate" id="someDate" value=""> 

我可以得到IE瀏覽器導航到的jsfiddle頁面很容易崩潰,然後開始玩弄(刷新,選擇一個日期,標籤出了場等)。

當IE崩潰時,會顯示一個對話框:「Internet Explorer已停止工作 - 問題導致程序無法正常工作。如果解決方案可用,Windows將關閉程序並通知您。事件日誌顯示事件ID爲1000的應用程序錯誤。

有什麼建議嗎?

~~~~~~~~~

UPDATE:這沒有得到解決,但我不願將其標記爲解答或提供一個真正的答案,因爲我不明白髮生了什麼改變,使這行得通。所有發生的問題都發生在IT人員分發的虛擬機上。 IT人員在虛擬機上改變了一些東西(可能是Windows環境,或許?),問題就解決了。

+0

這裏沒問題,IE8/Win7 – Blazemonger

+1

這聽起來像是一個問題喲你的機器。我可以查看jsFiddle並單擊該字段 - 雖然日期選擇器未設置樣式,但仍然顯示並適當地對事件作出反應。我在IE9中請求了8次,並且從未發生過崩潰。 – Tejs

+0

這不是我的機器唯一的。這發生在我在辦公室檢查過的所有機器上。到目前爲止,所有的Windows 7 Pro。 –

回答

0

如果我初始化其通過互聯網上的某人建議的DatePicker元素時做同樣的事情:

$('.DatePicker').datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
    var now = new Date(this.value); 
    if (now) { 
     var max = new Date(year, month, 0).getDate(); 
     var day = now.getDate() > max ? max : now.getDate(); 
     var newDate = new Date(year, month-1, day); 
     inst.input.datepicker('setDate', newDate); 
    } 
    } 
}); 

(當然我已附加類= DatePicker的在所要求的輸入元件)

然後更改日期時,IE總是崩潰。

如果我省略onChangeMonthYear處理程序或只是註釋掉inst.input.datepicker ...行,問題就會消失(當然在這種情況下,所需的funcionality也會消失)。

所以我做了一些更多的實驗,並意識到問題出在第一行:

var now = new Date(this.value); 

在這裏,我們試圖建立從輸入字段值的日期變量。它看起來IE不會在格式本地化的時候(比如我在匈牙利語中)構造,所以結果將是NaN。看起來這是真正的問題。無論如何,我很奇怪Chrome和Firefox運行正常。

所以我改變了我的第一線爲:

var now = inst.input.datepicker('getDate'); 

而且沒有崩潰了。

我在底線發現了另一個奇怪的行爲:DatePicker可見一個小的矩形。當鼠標懸停時,這也會導致一些錯誤。但我已經找到了解決方案也爲我的主模板,這將一小片的CSS jquery.ui.css後:

#ui-datepicker-div 
{ 
    display: none; 
} 

所以我很高興它工作在IE6,Chrome瀏覽器,Firefox作爲我想要的。

這裏是我的日期選擇器最終的初始化代碼:

$('.DatePicker').datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
    var now = inst.input.datepicker('getDate'); 
    if (now) { 
     var max = new Date(year, month, 0).getDate(); 
     var day = now.getDate() > max ? max : now.getDate(); 
     var newDate = new Date(year, month-1, day); 
     inst.input.datepicker('setDate', newDate); 
    } 
    } 
}); 

和我的DateTimePicker還有:

我使用jQuery 1.7.1和jquery.ui.1.8.16

Miklos