Javascript не является моим первым языком выбора, и я не являюсь одним из них. Я все это хорошо разбираюсь. Функциональные вещи прекрасные, объекты, не так много.Уменьшение глобальных переменных и поддержание потока функций
Я смотрю, может ли кто-нибудь предложить варианты для работы со следующим сценарием.
function postcodeEntry(destination,postcode) {
"use strict";
document.getElementById('googlemappostcode').innerHTML = <?php if ($_GET['page']==="fun") echo "<div id=\"map\"></div>' + ";?>'<form id="postcodeEntry" method="post" action="/" onsubmit="calcRoute(\'driving\',this.postcode.value,' + destination.hb + ',' + destination.ib + ',\'' + postcode + '\');return false;">'
+ '<h2>Get directions</h2>'
+ '<fieldset>'
+ '<input type="hidden" name="action" value="gmap-directions" />'
+ '<p class="where"><a href="/contact/" onclick="geoLoc();return false;">Where am I?</a></p>'
+ '<label for="postcode">Enter your postcode for directions</label>'
+ '<input type="text" name="postcode" id="postcode" onfocus="checkthis(this,\'Your Postcode/Address:\')" onblur="checkthis(this,\'Your Postcode/Address:\')" value="Your Postcode/Address:" />'
+ '<input type="submit" name="submitTravelType" value="Driving" id="gms_driving" onclick="calcRoute(\'driving\',document.getElementById(\'postcode\').value,' + destination.hb + ',' + destination.ib + ',\'' + postcode + '\');return false;" />'
+ '<input type="submit" name="submitTravelType" value="Walking" id="gms_walking" onclick="calcRoute(\'walking\',document.getElementById(\'postcode\').value,' + destination.hb + ',' + destination.ib + ',\'' + postcode + '\');return false;" />'
+ '<input type="submit" name="submitTravelType" value="Public Transport" id="gms_transit" onclick="calcRoute(\'transit\',document.getElementById(\'postcode\').value,' + destination.hb + ',' + destination.ib + ',\'' + postcode + '\');return false;" />'
+ '<input type="submit" name="submitTravelType" value="Cycling" id="gms_bicycling" onclick="calcRoute(\'bicycling\',document.getElementById(\'postcode\').value,' + destination.hb + ',' + destination.ib + ',\'' + postcode + '\');return false;" />'
+ '</fieldset>'
+ '</form>'
+ '<div id="directions"></div>';
}
function initialize() {
"use strict";
var contentString, destination, el, entryPanoId, i, image, infowindow, links, mapOptions, panoId, panoOptions, radius, shadow, shape;
/* Destination becomes a four part array. 1st being lat, 2nd being long, 3rd being a google maps latlng and the 4th being postcode */
destination = [<?php echo $venue['latlong']?>];
destination[2] = new google.maps.LatLng(destination[0], destination[1]);
destination[3] = '<?php echo $venue['postcode']?>';
postcodeEntry(destination[2], destination[3]);
directionsService = new google.maps.DirectionsService();
directionsDisplay = new google.maps.DirectionsRenderer();
trafficLayer = new google.maps.TrafficLayer();
streetviewService = new google.maps.StreetViewService();
...
Когда функция инициализации называется, она делает бит и делает карту прекрасной. Запись почтового индекса/местоположения работает отлично. На самом деле все работает, никаких проблем с этим.
Мой вопрос заключается в том, что некоторая информация отбрасывается в форму почтового индекса, возврат из этой формы относится к функциям geoLoc или calcRoute. Это, конечно, означает, что я теряю контакт с чем-либо, установленным в функции инициализации.
Это означает, что я должен использовать довольно много глобальных переменных, включая, но не ограничиваясь, каждый из этих элементов в показанном сегменте скрипта.
Я пытаюсь узнать больше о языке и стать более опытным в его использовании. В результате я хотел бы (в основном, из чистого упрямства) попытаться уменьшить глобальные значения до одного (если это возможно) или как можно меньше.
Есть ли способ решить эту проблему? Я не знаю много о javascript-объектах, но я все время учусь так, чтобы каким-то образом превратить функцию initialize в объект, который затем содержит все остальные объекты? (Учитывая, насколько мало я знаю об объектах javascript в настоящее время, на самом деле это может быть совершенно безумно)
Спасибо за что :) Я использую JS для создания HTML коды вполне сознательно, потому что я на самом деле есть другие элементы на месте, которые означают, что когда javascript отключен или недоступен, доступны другие варианты, доступные пользователю. Они заменяются более интерактивными возможностями js, если они доступны. Это сознательное решение для этого. Что касается php, я думаю, это личное дело. Только один вопрос. Как я могу обратиться к функциям, которые необходимо отправить в форму? – Rafe
Я только что добавил несколько дополнительных примеров в свой ответ. Надеюсь, это поможет. –
Это похоже на путь. Только конвертировала половину функциональности после тяжелой кривой обучения вчера. У меня есть несколько запросов, но я сохраню их для другого вопроса, если я не смогу найти ответ самостоятельно. Большое спасибо :) – Rafe