Подтвердить что ты не робот

JQuery 1.8 внешний Высота/ширина не работает

Я использовал outerHeight и outerWidth во многих местах. Теперь, после выхода jQuery 1.8, я встретил много проблем, вызванных возвратом объекта, а не его размером.

Например:

$('#stackoverflowdiv').Height()      // returns 100 px
$('#stackoverflowdiv').outerHeight() // returns "stackoverflowdiv" div

Единственное, что я нашел, чтобы исправить это, это использовать "true/false" в функции следующим образом, но я получаю те же результаты, что и стандартные функции width() и height():

$('#stackoverflowdiv').outerHeight(true)  //  returns 100 px
$('#stackoverflowdiv').outerHeight(false) //  returns 100 px

Кто-нибудь знал, почему это не работает больше или иначе, чтобы получить высоту/ширину элемента + его полей.

EDIT: Я начал полагать, что это вызвано тем, что я выбираю элементы iframe с помощью функции contents(). Я попытаюсь сделать демо.

4b9b3361

Ответ 1

На самом деле это известная ошибка jQuery, которую вы можете прочитать здесь здесь.

Я испытываю это без параметра, и исправление устанавливает параметр (хотя есть значение по умолчанию {false}), но я смог сломать скрипку Barlas, заменив истинный параметр 1 и false на 0. Поэтому не делайте этого, если вы.

Сделайте это:

alert(jQuery(this).outerHeight(false));

Не делайте этого:

alert(jQuery(this).outerHeight());
alert(jQuery(this).outerHeight(0));

Ответ 2

Это работает, только если я .outerHeight(1); не .outerHeight(true);

Ответ 3

JQuery 1.8 height() innerHeight() и outerHeight() и outerHeight(true) работают как ожидалось:

DEMO - Методы рабочей высоты

В приведенной выше демонстрации используется div:

<div id="myDiv">My Div</div>

Со следующим CSS:

div{
    border: 1px solid blue;
    padding: 5px;
    margin: 10px;
}

Используя этот script:

var $div = $("#myDiv");
var height = $div.height();
var heightWithPadding = $div.innerHeight();
var heightWithPaddingAndBorder = $div.outerHeight();
var heightWithPaddingAndBorderAndMargin = $div.outerHeight(true);

var $result = $("#result");
$result.append("height: " + height);
$result.append("<br />height with padding: " + heightWithPadding);
$result.append("<br />height with padding and borders: " + heightWithPaddingAndBorder);
$result.append("<br />height with padding and borders and margin: " + heightWithPaddingAndBorderAndMargin);

Результат:

height: 20
height with padding: 30
height with padding and borders: 32
height with padding and borders and margin: 52

Ответ 4

Лучшее решение - передать логический параметр true или false при вызове outerHeight или outerWidth

Но..

Если у вас нет доступа к файлам, вызывающим outerHeight, или вы не хотите редактировать все функции outerHeight в своих файлах, вы можете переопределить функцию jQuery outerHeight, как показано ниже, чтобы сделать он всегда передает параметр true

var oldOuterHeight =  $.fn.outerHeight;

$.fn.outerHeight = function () { 
    return oldOuterHeight.apply(this, [true]);
};

Ответ 5

Он работает отлично, я не могу быть уверен, не видя ваши html и css, но вы можете проверить этот пример и изучить его отлично работает на jQuery 1.8.0

Здесь работает jsFiddle.

JQuery

console.log($('#stackoverflowdiv').outerHeight(false));//returns 110
console.log($('#stackoverflowdiv').outerHeight(true));//returns 130

CSS

#stackoverflowdiv { 
      height:100px; margin:10px 5px; padding:5px; border 2px solid #fff;
}​

Вы уверены, что забыли использовать точку с запятой или определить document.ready? Или хуже забыл определить margin или border?

Ответ 6

outerHeight возвращает целое число или null в соответствии с jQuery DOC.

В вашем программном обеспечении должно быть что-то еще, и вы увидите элемент div.