У меня есть проблема, когда у меня есть код, который я хочу применить к двум немного отличающимся приложениям, но 75% кода будут одинаковыми. Это где я с вещами:Повторное использование одного и того же javascript с немного отличающимся приложением
http://jsfiddle.net/spadez/H6SZ2/6/
$(function() {
var input = $("#loc"),
lat = $("#lat"),
lng = $("#lng"),
lastQuery = null,
lastResult = null, // new!
autocomplete;
function processLocation(callback) { // accept a callback argument
var query = $.trim(input.val()),
geocoder;
// if query is empty or the same as last time...
if(!query || query == lastQuery) {
callback(lastResult); // send the same result as before
return; // and stop here
}
lastQuery = query; // store for next time
geocoder = new google.maps.Geocoder();
geocoder.geocode({ address: query }, function(results, status) {
if(status === google.maps.GeocoderStatus.OK) {
lat.val(results[0].geometry.location.lat());
lng.val(results[0].geometry.location.lng());
lastResult = true; // success!
} else {
alert("Sorry - We couldn't find this location. Please try an alternative");
lastResult = false; // failure!
}
callback(lastResult); // send the result back
});
}
var ctryiso = $("#ctry").val();
var options = {
types: ["geocode"]
};
if(ctryiso != ''){
options.componentRestrictions= { 'country': ctryiso };
}
autocomplete = new google.maps.places.Autocomplete(input[0], options);
google.maps.event.addListener(autocomplete, 'place_changed', processLocation);
$('#search_form').on('submit', function (event) {
var form = this;
event.preventDefault(); // stop the submission
processLocation(function (success) {
if(success) { // if the geocoding succeeded, submit the form
form.submit()
}
});
});
});
Когда представить форму нажатии кнопки он будет делать следующее (это уже работает):
- Check если результат уже скопирован с помощью autosuggest, нажмите
- Если нет, геокод
- Отправить форму в случае успеха
При нажатии кнопкиGeocode Я хочу, чтобы это сделать следующее (это не работает):
- Проверьте, если результат уже привязан к местности с автозаполнения нажмите
- Если нет, геокодировать
Итак, мой вопрос: как я могу это сделать, поэтому я могу использовать один и тот же код для обоих сценариев, не повторяя его дважды. Моя идея состояла в том, чтобы сделать следующее:
- имеет функцию для кнопки «отправить форму», которая включает в себя представивший форму
- имеет функцию для кнопки геокодирования, которая не включает в себя отправку формы
Я предпочел бы использовать функцию для каждой кнопки, а не использовать какой-то флаг, но я полностью зациклен на том, как реализовать это, каждый раз, когда я работаю над этим, я в конечном итоге полностью нарушаю скрипт. Любая помощь будет высоко оценена, потому что я новичок в javascript, и я немного борюсь с этим.
Это немного продвинутый для меня, мне нужно немного почитать об этом, потому что я действительно не понимаю обратные вызовы в данный момент. – Jimmy
Дайте мне несколько минут, и я продемонстрирую. На самом деле это довольно простая концепция. –
Ум, ваши две формы идентичны! Вы не можете использовать идентификатор более одного раза на странице. –