Когда я предупреждаю значение .position().left
, это возвращается 0 на Chrome. С другими браузерами это возвращает фактическое число. Почему это происходит?
Веб-кит иногда бывает слишком быстрым, но о нем часто заботятся в jQuery. Вы можете отлаживать, используя что-то вроде:
var v, elem = $('.myElement');
window.setTimeout(function() {
v = elem.position().left;
console.log(v);
if (v) {
return false;
}
window.setTimeout(arguments.callee, 1);
}, 1);
Это позволит проверить, доступна ли позиция и когда она доступна. Если вы бесконечно регистрируете "0", то position().left
"никогда" не будет доступна и вам нужно будет отлаживать в другом месте.
Самым простым может показаться:
^[^a-z]*$
-121--2198077- m/^[^a-z]*$/
Для неанглийских символов
m/^[^\p{Ll}]*$/
-121--2198073- У меня была та же проблема..
Я исправил его с помощью: .offset () .left
. Но имейте в виду, что это не одно и то же:
http://api.jquery.com/offset/
.position () .left
работал в Chrome в некоторых тестах, которые я делал, используя
аналогичный подход, чем у Дэвида (значение было доступно, так как
первая попытка).
В моем «реальном» приложении не удалось даже
чтение положения на событии click (что может исключить любую загрузку
проблема скорости).
Некоторые комментарии (в другом форуме) говорят, что это может быть связано
к использованию дисплеев: встроенный блок
. Однако я не смог
воспроизвести проблему с помощью inline-block
. Так что это может
быть другой вещью.
Прочитав комментарии с http://api.jquery.com/position/ , есть несколько способов исправить это. Я обнаружил, что работает
Аджахо [Модератор]: эта функция плагина устраняет проблемы с неправильным положением в Chrome
jQuery.fn.aPosition = function() {
thisLeft = this.offset().left;
thisTop = this.offset().top;
thisParent = this.parent();
parentLeft = thisParent.offset().left;
parentTop = thisParent.offset().top;
return {
left: thisLeft-parentLeft,
top: thisTop-parentTop
};
};