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

Изменение размера jQuery не работает в FireFox, Chrome и Safari

$("#dvMyDIV").bind("resize", function(){
    alert("Resized");
});

или

$("#dvMyDIV").resize(function(){
    alert("Resized");
});

Вопросы

  • Почему это не работает в FireFox, Chrome и Safari?
  • Может ли это считаться ошибкой jQuery, так как изменение размера не обрабатывается для других браузеров?
  • Может ли единственный обходной путь вызвать функцию SetTimeout, проверяющую clientHeight и clientWidth?
  • Любые способы обхода использования jQuery?
4b9b3361

Ответ 1

Я считаю, что событие изменения размера JavaScript применяется только к фреймам или окнам, а не к DIV.

например. см. эта страница:

Обработчик четности onResize используется для выполнения указанного кода всякий раз, когда пользователь или script изменяет размер окна или фрейма. Это позволяет вам запрашивать размер и положение элементов окна, динамически reset свойства SRC и т.д.

Итак, если вы хотите определить, когда изменяется размер окна, в jQuery вы, вероятно, должны использовать $(window).resize(function() { });

Изменить:, если вы хотите посмотреть размер DIV, это зависит от вашего намерения. Если вы изменяете размер с помощью JavaScript, вы можете реализовать метод для выполнения изменения размера и иметь этот дескриптор, вызывающий любой другой код изменения размера.

В противном случае, если вы просто смотрите, как DIV изменит размер, когда кто-то изменит размер окна, не будет ли это просто работать, чтобы прикрепить прослушиватель resize к окну, а затем проверить, был ли DIV изменен (например, сохранить старый значения ширины/высоты и проверить их при изменении размера)?

Наконец, вы можете использовать watch свойства width/height, хотя я не знаю, полностью ли это браузер, (думаю, это может быть только Mozilla). Я нашел этот плагин jQuery, который выглядит так, как будто он может сделать то же самое (хотя и с некоторыми небольшими изменениями).

Ответ 3

Вы пытаетесь установить myDiv на определенный размер?

Попробуйте код JavaScript ниже. Я использовал его для изменения размера div, который содержит флэш-объект, основанный на высоте, возвращаемой из флеш файла, и, похоже, для меня это хорошо.

function setMovieHeight(value) {
    var height = Number(value) + 50;
document.getElementById("video").height = height;
}

эквивалент jQuery должен быть:

function setHeight(value) {
   var height =  number(value) + 50;
   $('#MyDiv').attr('height') = height;
}

Изменение размера похоже только на объект Windows.

Ответ 4

Это не вопрос ПОЧЕМУ? Это требование, как и в случае, мы хотим контролировать DIV, когда он изменяется.

Для очевидного примера jQuery UI, изменяемый по размеру. Да, пользователь изменил размер div с помощью мыши, теперь что? Возможно, содержимое внутри изменяется, и мы хотим знать об этом. И должен ли мы иметь весь код в гигантском плавильном котле в исходном коде для прокрутки? Я так не думаю.

Еще один быстрый браузер, который ничего не делает, вздыхает.

Ответ 5

Почему вы ожидаете изменения размера #dvMyDIV? Возможно, изменение размера этого элемента является результатом чего-то другого, возможно, изменение размера окна? Если да, попробуйте

$(window).resize(function(){alert("Resized");});

Ответ 6

Я мог бы предложить что-то вроде этого:

1) на загрузку страницы, получите ширину вашего div и поместите его в глобальную переменную

2) при выполнении любой операции непосредственно или неявно изменяет размер этого div (который, как я полагаю, является событием, управляемым javascript), проверьте новую ширину на ширину старой и обновите глобальное значение с новой шириной.

Ответ 7

Вот намного более утонченный и живой пример, который делает много математики изменения размера на основе события изменения размера окна. Работает блестяще в ff 3.6, сафари 4.0.4 и хром. Это немного коротко в 3.5. Таким образом, он должен работать в mozilla и webkit через доски. Я избегаю другого БРАУЗЕРА, потому что мне это действительно не нравится, и код настолько чище, без необходимости его рассматривать. Я понимаю, что мне придется преодолеть это, я проглотил его, когда мне нужно, и надбавку IE.

ANYWAY ссылка:

http://fridaydev.com/bookmap/proport3.html

Ответ 8

С MSIE все работает отлично. С Firefox, я думаю, вам придется прибегать к некоторым наклонным методам, таким как сохранение оригинальной ширины/высоты элемента в пользовательских свойствах и использование $(elem).bind('DOMAttrModified', func). Затем в обратном вызове func() проверьте, отличаются ли новые ширина/высота от ранее сохраненных вами значений, выполните соответствующее изменение размера и сохраните их снова для последующего обратного вызова. Обратите внимание, что этот подход работает только для Firefox. Мне пока не удалось найти подходящее решение для Chrome, Safari и Opera. Возможно, использование window.setInterval() будет делать, но... звучит слишком slopy... событие, которое думает об этом, делает меня любопытным: (