2011-04-20 50 views
0

所需的I有一個JavaScript功能(日曆時期)當焦點被設定在一定的文本框,其顯示的日曆。這在ie8,ff(所有版本,據我可以測試),歌劇等,但在ie7或以前不起作用罰款。JavaScript錯誤:對象在IE6&IE7

,如果我有它在一個空白的HTML測試頁設置,將工作,所以我相當肯定它與我的CSS(由設計者提供給我)的衝突。

我跟蹤的誤差的這幾行代碼 -

Epoch.prototype.getTop = function (element) //PRIVATE: returns the absolute Top value of element, in pixels 
{ 
    var oNode = element; 
    var iTop = 0; 

    while(oNode.tagName != 'BODY') { 
     iTop += oNode.offsetTop; 
     oNode = oNode.offsetParent; 
    } 

    return iTop; 
}; 

Epoch.prototype.getLeft = function (element) //PRIVATE: returns the absolute Left value of element, in pixels 
{ 
    var oNode = element; 
    var iLeft = 0; 

    while(oNode.tagName != 'BODY') { 
     iLeft += oNode.offsetLeft; 
     oNode = oNode.offsetParent;   
    } 

    return iLeft; 
}; 

更具體地說,如果我刪除實際while循環,則日曆將顯示OK,只是在頁面上的定位是錯的?低於該

編輯

守則規定 '元素'

<script type="text/javascript"> 

     window.onload = function() { 
      var bas_cal, dp_cal, ms_cal; 
      dp_cal = new Epoch('epoch_popup', 'popup', document.getElementById('<%=txtDateOfDiag.ClientID%>')); 
      dp_cal = new Epoch('epoch_popup', 'popup', document.getElementById('<%=txtDOB.ClientID%>')); 
     }; 

</script> 

注:我使用asp.net母版頁這就是爲什麼有必要對.ClientID

編輯

進一步的更新 - 我已經重新創建這個沒有使用css(但包括設計者提供的.js文件)代碼仍能正常工作,CSS和JavaScript之間必須存在某種衝突?

回答

1

這將導致我相信標記名不匹配,可能是因爲你擁有了它大寫。您可以嘗試while(!oNode.tagName.match(/body/i)) {

+0

我原以爲情況而定的問題,並曾試圖在這之前,我已經RIED你的建議,但仍得到相同的錯誤,因爲我以前... – allanmayberry88 2011-04-20 08:59:09

0

,如果你添加一行代碼調試像這樣發生了什麼:

var oNode = element; 
var iLeft = 0; 
alert(oNode); 

這可能會給在不同的瀏覽器不同的結果;我認爲它可能是空的IE瀏覽器。
你可能想看看它提供的「元素」參數的值,看看是否有一個基於瀏覽器的問題上都存在的代碼。

+0

您的警報說,「[對象HTMLInputElement]」我已經添加了將'元素'設置爲我的問題的代碼。代碼在ie7中顯示任何警報之前就會結束。 – allanmayberry88 2011-04-20 09:55:49