Ошибка JavaScript: объект требуется в ie6 и ie7 - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть функция javascript (календарь эпох), которая отображает календарь, когда фокус установлен на определенные текстовые поля.это хорошо работает в ie8, ff (все версии, насколько я могу проверить), opera и т. д., но не работает в 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, то в календаре будет отображаться «ОК», просто что его позиционирование на странице неверно?element '

<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?

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Это заставило бы меня поверить, что tagName не совпадает, возможно, потому, что оно у вас в верхнем регистре.Вы можете попробовать while(!oNode.tagName.match(/body/i)) {

0 голосов
/ 20 апреля 2011

что произойдет, если вы добавите строку кода отладки, подобную этой:

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

Это может дать разные результаты в разных браузерах;Я думаю, что это может быть NULL для IE.
Возможно, вы захотите взглянуть на код, который предоставляет значение параметра 'element', чтобы увидеть, есть ли там проблема, зависящая от браузера.

...