LINUX.ORG.RU

JavaScript не отрабатывается часть функции

 


0

2

Есть такая функция:

<script type="text/javascript">
		function fillForm1(x) {
			document.getElementById(x + "_minute").value = new Date().getMinutes();
			document.getElementById(x + "_day").value = new Date().getDate();
			document.getElementById(x + "_month").value = new Date().getMonth() + 1;
			document.getElementById(x + "_year").value = new Date().getFullYear();
			document.getElementById(x + "_hour").value = new Date().getHours();
		}
</script>

Иногда бывает, что последняя строка или даже две строки не отрабатываются. Вопрос почему?

★★

Каковы условия этого иногда? Подозреваю что у тебя происходит гонка событий, например элемент с неким id не успевает появиться на странице к моменту выполнения строки.

Hater ★★
()

А зачем столько new Date()? И какой смысл копипастить столько одинакового? В цикле же можно было заполнить.

Не срабатывает везде, или на каком-то конкретном браузере?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Hater

Я тоже подозреваю это но не знаю что делать... иногда меняю строки в функции и все снова работает.

Pirr ★★
() автор топика
Ответ на: комментарий от Eddy_Em

Есть форма для заполнения, в ней практически одни даты. Дата представлена в виде 5 раскрывающихся списков, по умолчанию дата пустая. Для бысрого заполнения, я приделал кнопочку которая проставляет текущую дату в поля.

Pirr ★★
() автор топика
Ответ на: комментарий от Apple-ch

А если эта функция вызывается кнопкой? т.е. нужно сделать так, чтобы функция работала только после полной загрузки страницы?

Pirr ★★
() автор топика
Ответ на: комментарий от Pirr

1. Нужен минимальный рабочий пример. 2. Это во всех браузерах проявляется или только в каком-то конкретном?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Проявлялось в среде разработки Eclips (не знаю что там за встроенный браузер), Firefox, Explorer.

Сейчас проверил, загрузил страницу... подождал чуток... и все заработало. Наверное действительно происходит гонка событий... кудаж поместить этот скрипт? в начало страницы?

Pirr ★★
() автор топика
Последнее исправление: Pirr (всего исправлений: 1)
Ответ на: комментарий от Pirr

нужно сделать так, чтобы функция работала только после полной загрузки страницы?

Это в любом случае не будет лишним.

Дата представлена в виде 5 раскрывающихся списков

Глупый вопрос, но всегда ли в списках корректный набор опций?

З.Ы. Фидл в студию!

Apple-ch ★★
()
Ответ на: комментарий от Pirr

Ты говоришь, что скрипт запускается по нажатию "кнопки", а не автоматом при загрузке → никаких гонок здесь быть не может! Разве что полстраницы (вместе с кнопкой) загрузилось, а поля, которые нужно заполнить, еще не догрузились. Тогда можно поставить флажок какой-нибудь, который будет true по событию onload. Его и проверять.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ты говоришь, что скрипт запускается по нажатию «кнопки», а не автоматом при загрузке → никаких гонок здесь быть не может!

Ну элементы в DOM пихать тебе никто не мешает уже после загрузки. Т.е. возможно отрисовка контроллов как-то связана с событием нажатия кнопки или что-то вроде того. Короче действительно без фиддла это гадание на кофейной гуще.

Hater ★★
()
Ответ на: комментарий от Hater

Короче действительно без фиддла это гадание на кофейной гуще.

Понятное дело. Нужен нормальный минимальный пример. Без такого и на SO пошлют.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Hater

А как филд выложить, как то что получается в браузере или ка то что у меня в проекте? А то проект у меня на Grails там филд даты одной строчкой идет... а вот в браузере уже куча html.

Pirr ★★
() автор топика
Последнее исправление: Pirr (всего исправлений: 1)
Ответ на: комментарий от Pirr

Нужен небольшой html, который будет содержать только проблемный код, а также код, необходимый для работы проблемного. И все это — в максимально приближенных к "боевым" условиях.

Eddy_Em ☆☆☆☆☆
()

Вопрос почему?

вопрос: зачем создавать пять ОДИНАКОВЫХ объектов?

Сделай один, и всё заработает.

emulek
()
Ответ на: комментарий от Pirr

Чиню HTML ауру по скриншоту, вычищаю астральных жучков. Дорого. Писать в личку.

anonymous
()
Ответ на: комментарий от Pirr

Жесть-то какая! Налицо метод множественной копипасты китайских быдлокодеров.

Так пример-то будет? Где рабочий код?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Ну не программист я, что же делать... Код html у меня генерится Grails, ума не приложу... что выкладывать. Врят ли тут найдутся специалисты по Grails...

Pirr ★★
() автор топика
Ответ на: комментарий от Pirr

Код html у меня генерится Grails

Ну так и выложи сгенерённый HTML-код! Плюс JS-код, с которым проблемы.

Вот удобный сервис для этого.

Apple-ch ★★
()
Ответ на: комментарий от Pirr

Точнее так: DOM ready события и построение приложений в этом ключе.

В частности, событие DOMContentLoaded (сейчас не помню, но вроде было событие еще DOMReady (вокруг этой темы появилось довольно много мусорного контента - смотрите первоисточники типа Mozilla Developer Network w3.org))

https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded

swwwfactory ★★
()
Ответ на: комментарий от emulek

пять ОДИНАКОВЫХ объектов

Вообще то, они не одинаковые. В данном случае, мож пох, но объект порождаемый Date, создается в рантайме, и содержит время, на момент создания, а не на момент вызова методов.


ob=new Date()
console.log(ob.getSeconds())
console.log(new Date().getSeconds())
setTimeout(function(){console.log(ob.getSeconds())}, 5000)
setTimeout(function(){console.log(new Date().getSeconds())}, 5000)

38
38
38
43

anonimous
()
Ответ на: комментарий от emulek

Не вижу связи. Ему правильно в первом же ответе подсказали — это гонки. На момент присваивания value результата выполнения ф-ции, объект который запрашивается по id еще не существует.

anonimous
()
Ответ на: комментарий от anonimous

На момент присваивания value результата выполнения ф-ции, объект который запрашивается по id еще не существует.

а, ну да. Там и в lvalue хрень, и в rvalue тоже хрень.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.