none
Sys.UI.Bounds и IE8 RRS feed

  • Вопрос

  • Столкнулся со следующей проблемой.

    Стоит IE8 версии 8.0.6001.18702СО. Режим документов - IE8, Режим совместимости - IE8. Эти настройки по умолчанию. Имеется веб страница. На ней 3 дива - Main->OuterBorder->InnerBorder.

    На Sys.Application.add_load(PageLoad) повешено событие ресайза. Вычисляется досутпная область окна. Затем диву Main задается ширина и высота этой области через style.width и style.height соответственно. В DomExplorere четко видно, что эти свойства заданны корректно, например width:800px и height:600px.

    Затем, получаю через Sys.UI.Bounds границы элемента Main. Функция возвращает высоту примерно в 2 раза больше, чем указано в стиле. И свойство offsetHeight у Main тоже установлено в какое-то иное отличное значение от стиля.

    Когда же переходим в режим документа IE7, все считается корректно.

    Были ли у кого-нибудь еще подобного рода проблемы, это ошибка AJAX фреймворка, или IE8, или есть какие-то особенные условия ее возникновения. Ну и конечно, буду рад любому способу решения или обхода данной ситуации.

    P.S. На FF и Safari тоже все работает как надо. Оперу не проверял.

    9 декабря 2010 г. 6:08

Ответы

  • Устанавливайте свойства width и height не через style, а кросплатформенно, у вас же есть jquery, и он отлично работает:

     

    var app = Sys.Application;
    app.add_load(ApplicationLoad);
    
    
    function ApplicationLoad(sender, args) {
      var elementRef = $("#Main");
      elementRef.width(800);
      elementRef.height(600);
    
        
    
    
      var elementRef1 = $get("Main");
      var elementBounds = Sys.UI.DomElement.getBounds(elementRef1);
      var result = '';
      result += "Label1 bounds x = " + elementBounds.x + "<br/>";
      result += "Label1 bounds y = " + elementBounds.y + "<br/>";
      result += "Label1 bounds width = " + elementBounds.width + "<br/>";
      result += "Label1 bounds height = " + elementBounds.height + "<p/>";
      alert(result);
    }
    
    А проблема возможно связана с Internet Explorer box model bug

     


    Для связи [mail]
    • Помечено в качестве ответа Eugene_Olisevich 15 декабря 2010 г. 16:49
    15 декабря 2010 г. 5:51
    Модератор

Все ответы

  • Устанавливайте свойства width и height не через style, а кросплатформенно, у вас же есть jquery, и он отлично работает:

     

    var app = Sys.Application;
    app.add_load(ApplicationLoad);
    
    
    function ApplicationLoad(sender, args) {
      var elementRef = $("#Main");
      elementRef.width(800);
      elementRef.height(600);
    
        
    
    
      var elementRef1 = $get("Main");
      var elementBounds = Sys.UI.DomElement.getBounds(elementRef1);
      var result = '';
      result += "Label1 bounds x = " + elementBounds.x + "<br/>";
      result += "Label1 bounds y = " + elementBounds.y + "<br/>";
      result += "Label1 bounds width = " + elementBounds.width + "<br/>";
      result += "Label1 bounds height = " + elementBounds.height + "<p/>";
      alert(result);
    }
    
    А проблема возможно связана с Internet Explorer box model bug

     


    Для связи [mail]
    • Помечено в качестве ответа Eugene_Olisevich 15 декабря 2010 г. 16:49
    15 декабря 2010 г. 5:51
    Модератор
  • Ну положим, jquery нет, так как есть строгая договоренность об его неиспользовании в проекте (понимаю звучит глупо, но порой некоторые структуры вот так вот ограничивают возможности разработчика).  Но в общем и целом куда копать теперь понятно. Спасибо.
    15 декабря 2010 г. 16:48