Вопрос по Java скрипту

1. user5300 1010 27.05.19 13:36 Сейчас в теме
Добрый день, прошу помочь с JavaScript - ом.

Имею макет с текстом :
|<!DO CTYPE html">
|.....
|	<sc ript type="text/javascript">
|
|function Sweet(point1,point2) {
|	 // Координаты Москвы
|ymaps.geocode(point1).then(function (res) { var moscowCoords = res.geoObjects.get(0).geometry.getCoordinates();
|         // Координаты Питера
|ymaps.geocode(point2).then(function (res) { var Piter= res.geoObjects.get(0).geometry.getCoordinates();
|	// Расстояние
|	document.getElementById('Znach').value = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(moscowCoords, Piter)));
|});
|});
|}
|......
|
|<body>
|	<input type="hidden" id="Znach" name="Znach" value=""></input>
|</body>

Показать


Пытаюсь выполнить функцию из 1С :

Процедура ВыполнитьСкрипт(Команда) Экспорт 
	ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value = Команда;
	ЭлементыФормы.HTMLДок.document.getElementById("WebClient").click();
КонецПроцедуры

...
ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value ="Sweet(Москва,Питер)";
Результат = ЭлементыФормы.HTMLДок.document.getElementById("Znach").value;
....
Показать


Но результат выходит пустой(
Такое ощущение что функция просто не выполняется... Ошибок не выводит никаких.
Может кто подскажет ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
39. user5300 1010 28.05.19 12:43 Сейчас в теме
(36) Всё, разобрался.
1 Не правильно параметры передавались
2 Ошибка расчета внутри функции

Функция просто не выполнялась, всем спасибо
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. 1eye 27.05.19 13:57 Сейчас в теме
Попробуй value менять через вызов функции в JS
3. user5300 1010 27.05.19 14:01 Сейчас в теме
(2) value вообще не меняется внутри функции, какое значение не присвоил бы внутри
4. 1eye 27.05.19 14:02 Сейчас в теме
если очень нужно именно из 1с, попробуй сделать общую переменную модуля на клиенте, присвой ей значение ЭлементыФормы.HTMLДок.document.parentWindow/defaultView (в зависимости от ОС) и обратись через нее
5. user5300 1010 27.05.19 14:04 Сейчас в теме
(4) parentWindow уже не работает же на IE 8 и выше
7. 1eye 27.05.19 14:06 Сейчас в теме
8. user5300 1010 27.05.19 14:12 Сейчас в теме
(7) а это для чего ? чтоб скрипт отобразить ?
карта выводится на форме же, остальные функции тоже выполняются, а именно эту пропускает, может функция не правильно нарисована js ?
6. user5300 1010 27.05.19 14:05 Сейчас в теме
ошибку выдает так,
да, именно с 1с нужно, работа с картой
9. 1eye 27.05.19 14:19 Сейчас в теме
так попробуй document.getElementById('Znach').value = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(moscowCoords, Piter))).toString()
10. user5300 1010 27.05.19 14:24 Сейчас в теме
(9) такой же результат, пусто
11. user5300 1010 27.05.19 14:27 Сейчас в теме
(9) как вообще узнать, выполняется функция внутри или нет ? нету что то вроде отладки или сообщить() ? )
12. 1eye 27.05.19 14:34 Сейчас в теме
выведи этот элемент на поле html и посмотри
13. 1eye 27.05.19 14:35 Сейчас в теме
по итогу, что нужно? чтоб при данные расстояния записывались в реквизит?
15. user5300 1010 27.05.19 14:38 Сейчас в теме
(13) именно, сократил функцию до
function Sweet(point1,point2) {
document.getElementById('Znach').value = 4;
alert( "Привет" ); }
Ни одно ни другое не выходит
14. avk72 79 27.05.19 14:36 Сейчас в теме
Добейтесь сначала, чтобы этот скрипт просто работал.
Отлаживайте без 1с.
Создайте любой html файл.

Скопируйте Ваш скрипт.

<!do ctype html>
<ht ml lang="ru">
<head>
  <met a charset="utf-8" />
</head>
<body>
   <div id = "Znach"></div>
   <button on click = "Sweet">Тест</button>
</body>
    <sc ript type="text/javascript">
       function Sweet(point1,point2) {

       //**** Ваш скрипт ********
          // Координаты Москвы
       ymaps.geocode(point1).then(function (res) { var moscowCoords = res.geoObjects.get(0).geometry.getCoordinates()}
          // Координаты Питера
       ymaps.geocode(point2).then(function (res) { var Piter= res.geoObjects.get(0).geometry.getCoordinates();}
          // Расстояние
       document.getElementById('Znach').value = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(moscowCoords, Piter)));
    }
    </sc ript>
</html>
Показать


Открываете файл любым браузером и запускаете инструменты разработчика - консоль.
Смотрим сообщения об ошибках.
16. user5300 1010 27.05.19 14:46 Сейчас в теме
17. 1eye 27.05.19 14:48 Сейчас в теме
полный документ можно?
18. user5300 1010 27.05.19 14:53 Сейчас в теме
19. 1eye 27.05.19 15:00 Сейчас в теме
(18) а sweet откуда вообще вызывается? я вызова не увидел
20. user5300 1010 27.05.19 15:07 Сейчас в теме
(19) из формы 1с :

Процедура ВыполнитьСкрипт(Команда) Экспорт 
    ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value = Команда;
    ЭлементыФормы.HTMLДок.document.getElementById("WebClient").click();
КонецПроцедуры

Процедура Нажатие()
ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value ="Sweet(Москва,Питер)";
Результат = ЭлементыФормы.HTMLДок.document.getElementById("Znach").value;
конецпроцедуры
Показать
21. 1eye 27.05.19 15:12 Сейчас в теме
(20) А она должна при клике отрабатывать?
22. user5300 1010 27.05.19 15:17 Сейчас в теме
(21) ну да, при нажатии на кнопку - рассчитывается расстояние , по идее так должно быть
23. 1eye 27.05.19 15:20 Сейчас в теме
(22) где она вызывается при нажатии? Просто в html не увидел объявления
24. user5300 1010 27.05.19 15:22 Сейчас в теме
(23) вот же функция
function WebClientClick() {
			//очистка перед кликом координат, иначе после клика в упр. формах идет считывание координат
			document.getElementById('CoordX').value = "0";
			document.getElementById('CoordY').value = "0";

			var WebClientOperation = document.getElementById("WebClientOperation").value;
			alert(WebClientOperation);
			switch (WebClientOperation) {   ////ВОТ тут передается наименование функции ( Ошибок нет, до сюда все работает)
				case "0": // ничего не делаем
					var a = 1;
				default: // запускаем функцию
					eval(WebClientOperation);    ////А вот отсюда запускается
			}
			
			document.getElementById('WebClientOperation').value = "0";
		}
Показать
25. 1eye 27.05.19 16:03 Сейчас в теме
(24) т.е. там значение WebClientOperation "Sweet(coord1, coord2)"?
26. user5300 1010 27.05.19 16:08 Сейчас в теме
(25) да, не правильно ? )
Заменил на WebClientOperation "Sweet([coord1], [coord2])"
не помогло
27. user5300 1010 27.05.19 16:14 Сейчас в теме
(25) как вообще произвольно написать функцию ? чтоб напрямую обращаться к ней ?
Добавить класс <input type="hidden" id="Sweet" name="Sweet" on click="Sweet(point1,point2);"></input>
и на форме обратиться к ней ЭлементыФормы.Эксплорер.document.getElementById("Sweet").click();

Как тогда параметры передавать ? ...запутался)
28. avk72 79 27.05.19 18:24 Сейчас в теме +0.5 $m
(27) Примерно так должен файл выглядеть.
Жмете кнопку, и все что нужно, должно работать.
Прикрепленные файлы:
Новый текстовый документТест.html
31. user5300 1010 28.05.19 08:08 Сейчас в теме
(28)да, почти так ) только как функцию вызвать из формы 1с, а не на карте ?)
36. avk72 79 28.05.19 10:47 Сейчас в теме
(31) Сюда загляните.
Пример вызова js из 1с

Примерно так надо

Элементы.НТМЛ.Документ.getElementById ("TestButton").click()
39. user5300 1010 28.05.19 12:43 Сейчас в теме
(36) Всё, разобрался.
1 Не правильно параметры передавались
2 Ошибка расчета внутри функции

Функция просто не выполнялась, всем спасибо
29. deGreese 27.05.19 19:29 Сейчас в теме
Я так понял все эти пляски лишь для того, чтобы вернуть значение из функции Sweet в JS?

В зависимости от платформы это будет работать так:
&НаКлиенте
Процедура КакаяТоПроцедура()
  Результат = Элементы.HTMLДок.Документ.parentWindow.Sweet(<какие-то параметры>); // в случае осла
  // или так
  Результат = Элементы.HTMLДок.Документ.defaultView.Sweet(<какие-то параметры>);//в случае вебкита
КонецПроцедуры


Параметры можно передавать только простых типов. Но если все данные есть на странице, на самой карте, то из 1С наверное нет смысла что-то тащить.
30. user5300 1010 28.05.19 07:49 Сейчас в теме
(29)нет, parentWindow уже не работает с IE 8 и выше
32. deGreese 28.05.19 09:28 Сейчас в теме
(30) прекрасно работает со всеми IE вплоть до 11. В 1С до смены движка HTML на вебкит тоже все прекрасно работало. Поэтому и написал, что в зависимости от платформы подойдет либо этот вариант, либо тот.
33. user5300 1010 28.05.19 09:34 Сейчас в теме
(32)
Прикрепленные файлы:
37. mrcamomile 80 28.05.19 10:58 Сейчас в теме
38. user5300 1010 28.05.19 12:40 Сейчас в теме
(37) второй для примера вставил , обе существуют
34. user5300 1010 28.05.19 09:35 Сейчас в теме
35. user5300 1010 28.05.19 09:43 Сейчас в теме
(32)В ранних версиях Internet Explorer (далее IE) вплоть до IE8 вызовы функций Javascript (далее JS) можно было осуществлять примерно так:

ПолеHTMLДокумента.document.parentWindow.MyFunc (...);
Начиная с версии IE9 такие вызовы, а также вызовы через eval () не работают... )
40. deGreese 28.05.19 14:59 Сейчас в теме
(35) Конечно ругается, потому что неправильно написано.
Надо именно так как написано у меня:
Элементы.HTMLДок.Документ.parentWindow.Sweet();

Где:
HTMLДок - поле HTML документа;
Документ - свойство поля HTML документа;
41. user5300 1010 28.05.19 15:28 Сейчас в теме
(40) написал правильно, ругается на parentWindow,
У меня IE 10 подключен.

parentWindow уже не работает https://infostart.ru/public/347442/ вот, почитай
42. deGreese 28.05.19 22:43 Сейчас в теме
Работает в 11 осле, на скриншоте пруф. Если бы у документа не было parentWindow, статусная строка не установилась бы.

В 1С parentWindow не работает начиная с версии 8.3.14 потому что поле HTML реализовано с помощью вебкита,
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот