onscroll срабатывает только один раз

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

Я не могу понять, что не работает с моим кодом - кажется, что onscroll срабатывает один раз, а затем больше никогда не срабатывает как в Internet Explorer, так и в Firefox.

У кого-нибудь есть идеи? Я искал это немного, и я не могу понять ошибку. (Я пробовал как onscroll +=, так и onscroll =, ничего не работает). Это смещение 39 просто для того, чтобы убедиться, что скрипт запущен, пока я не заставлю его работать.

window.onload=scrollSet;

function scrollSet(){
	window.onscroll += KeepLeftAtScroll();
}


function KeepLeftAtScroll(){
	var ele=document.getElementById("topAboveMenuMargin");
	if (ele != null){
		ele.style.left = 39+ document.documentElement.scrollLeft;
	}
		
}


person Charles    schedule 21.10.2014    source источник
comment
Почему вы переопределяете родной window.onscroll? KeepLeftAtScroll даже ничего не возвращает.   -  person Teemu    schedule 21.10.2014
comment
Я использую его для запуска кода, который перемещает div каждый раз, когда окно прокручивается.   -  person Charles    schedule 21.10.2014
comment
Нет, вы переопределяете window.onscroll с помощью NaN, который ничего не запускает; ). onscroll должен быть функцией. Вероятно, window.onscroll = KeepLeftAtScroll; делает то, что вы хотите.   -  person Teemu    schedule 21.10.2014
comment
Как указано, я пробовал += и =, но я не знал, что += перезаписал. Спасибо, я это запомню. При = KeepLeftAtScroll он по-прежнему срабатывает только один раз.   -  person Charles    schedule 21.10.2014
comment
Вы абсолютно уверены, что у вас есть только KeepLeftAtScroll, не KeepLeftAtScroll()?   -  person Teemu    schedule 21.10.2014
comment
Я не понимаю, где это имеет значение, если только вы не имеете в виду, есть ли у меня функция KeepLeftAtScroll{}?   -  person Charles    schedule 21.10.2014


Ответы (1)


Исправлена ​​проблема. Очевидно, javascript не любит разделять назначение и объявление, поскольку

window.onscroll = function KeepLeftAtScroll(){
	var ele=document.getElementById("topAboveMenuMargin");
	if (ele != null)
	{
		ele.style.left = window.pageXOffset;
	}
}

работает и делает то, что я хочу. Похоже, ему не понравилось «window.onscroll = KLAS ()», но все было в порядке с «window.onscroll = function KLAS () {}». Первоначально я выполнил часть загрузки, так как изначально не проверял значение null в своем элементе, и сделал это таким образом, чтобы обойти эту проблему.

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

person Charles    schedule 21.10.2014
comment
Хм... Это решает проблему. Хотя window.onscroll = KeepLeftAtScroll; тоже справился бы с этой задачей. Вы знаете, что есть разница между вызовом функции и ссылкой на функцию? - person Teemu; 21.10.2014
comment
Да. В тот вечер у меня было много странных проблем, и по какой-то причине window.onscroll = KLAT; не работал, пока я не объединил объявление и назначение. Я не знаю, что случилось, но я попытался проверить это снова, и window.onscroll = KeepLeftAtSroll; функция KeepLeftAtScroll(){ -code- } не работает. - person Charles; 21.10.2014