Перейти к содержимому


JS по событию "Onchange"


Сообщений в теме: 4

#1 Dinak

    Активный участник

  • Пользователи
  • PipPipPip
  • 207 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

Отправлено 10 Февраль 2015 - 12:56

Привет!
Есть три поля: "Загрузка", "Выгрузка", "Расстояние"
Необходимо, чтобы ниже приведенный JS-код (код указан в поле "Расстояние") исполнялся по изменению поля "Выгрузка" в режиме редактирования карточки, в таком виде он исполняется только при изменении поля "Расстояние" :-(

function onchange_{$one_field.id}()
{
var origin = document.getElementById("value12040").value,
	destination = document.getElementById("value12050").value,
	service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
	{
		origins: [origin],
		destinations: [destination],
		travelMode: google.maps.TravelMode.DRIVING,
		avoidHighways: false,
		avoidTolls: false
	},
	callback
);
function callback(response, status) {
	var dist = document.getElementById('value12060');
	if(status=="OK") {
		dist.value = response.rows[0].elements[0].distance.text;
	} else {
		alert("Error: " + status);
	}
}
}
addHandler(document.getElementById("value{$one_field.id}"), "onchange", onchange_{$one_field.id});

value12040 - поле "Загрузка"
value12050 - поле "Выгрузка"
value12060 - поле "Расстояние"

Сообщение отредактировал Dinak: 11 Февраль 2015 - 08:54


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Февраль 2015 - 14:17

Так переместите его в в поле Выгрузка, зачем вы вставили его в Расстояние? Куда прикрепили, при изменении чего и работает.

#3 Dinak

    Активный участник

  • Пользователи
  • PipPipPip
  • 207 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

Отправлено 05 Март 2015 - 08:32

А там он не срабатывает, т.к. в поле "Выгрузка" уже есть JS код на автозаполнение, итого получаем:

function initialize() {
var input = document.getElementById('value12050'); // поле "выгрузка"
var autocomplete = new google.maps.places.Autocomplete(input);
}
google.maps.event.addDomListener(window, 'load', initialize);
// а теперь код на событие "изменение поля"
function onchange_{$one_field.id}()
{
var origin = document.getElementById('value12040').value, // поле "загрузка"
	destination = document.getElementById('value12050').value, // поле "выгрузка"
	service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
	{
		origins: [origin],
		destinations: [destination],
		travelMode: google.maps.TravelMode.DRIVING,
		avoidHighways: false,
		avoidTolls: false
	},
	callback
);
function callback(response, status) {
	var dist = document.getElementById('value12060'); // поле "расстояние"
	if(status=="OK") {
		dist.value = response.rows[0].elements[0].distance.text;
	} else {
		alert("Error: " + status);
	}
}
}
addHandler(document.getElementById("value{$one_field.id}"), "onchange", onchange_{$one_field.id});

При этом, автозаполнение в поле по прежнему работает, а вот изменение на "Расстояние" уже не срабатывает!

Сообщение отредактировал Dinak: 05 Март 2015 - 08:45


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 05 Март 2015 - 09:57

У вас в любом случае код из первого сообщения работать не будет, т.к. он привязан не к тому полю. Если в нужном поле уже есть другая функция на событие изменения, нужно как-то объединить эти 2 функции, других вариантов нет.

#5 Dinak

    Активный участник

  • Пользователи
  • PipPipPip
  • 207 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

Отправлено 06 Март 2015 - 13:34

Можете помочь с объеденением ?





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных