Изменение размера jQuery не работает в FireFox, Chrome и Safari
$("#dvMyDIV").bind("resize", function(){
alert("Resized");
});
или
$("#dvMyDIV").resize(function(){
alert("Resized");
});
Вопросы
- Почему это не работает в FireFox, Chrome и Safari?
- Может ли это считаться ошибкой jQuery, так как изменение размера не обрабатывается для других браузеров?
- Может ли единственный обходной путь вызвать функцию SetTimeout, проверяющую clientHeight и clientWidth?
- Любые способы обхода использования jQuery?
Ответы
Ответ 1
Я считаю, что событие изменения размера JavaScript применяется только к фреймам или окнам, а не к DIV.
например. см. эта страница:
Обработчик четности onResize используется для выполнения указанного кода всякий раз, когда пользователь или script изменяет размер окна или фрейма. Это позволяет вам запрашивать размер и положение элементов окна, динамически reset свойства SRC и т.д.
Итак, если вы хотите определить, когда изменяется размер окна, в jQuery вы, вероятно, должны использовать $(window).resize(function() { });
Изменить:, если вы хотите посмотреть размер DIV, это зависит от вашего намерения. Если вы изменяете размер с помощью JavaScript, вы можете реализовать метод для выполнения изменения размера и иметь этот дескриптор, вызывающий любой другой код изменения размера.
В противном случае, если вы просто смотрите, как DIV изменит размер, когда кто-то изменит размер окна, не будет ли это просто работать, чтобы прикрепить прослушиватель resize к окну, а затем проверить, был ли DIV изменен (например, сохранить старый значения ширины/высоты и проверить их при изменении размера)?
Наконец, вы можете использовать watch свойства width/height, хотя я не знаю, полностью ли это браузер, (думаю, это может быть только Mozilla). Я нашел этот плагин jQuery, который выглядит так, как будто он может сделать то же самое (хотя и с некоторыми небольшими изменениями).
Ответ 2
Для этого есть плагин benalman:)
http://benalman.com/projects/jquery-resize-plugin/
Ответ 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... событие, которое думает об этом, делает меня любопытным: (