2013-06-20 1 views
0

У меня есть проблема, когда у меня есть код, который я хочу применить к двум немного отличающимся приложениям, но 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() 
     } 
    }); 

    }); 
}); 

Когда представить форму нажатии кнопки он будет делать следующее (это уже работает):

  1. Check если результат уже скопирован с помощью autosuggest, нажмите
  2. Если нет, геокод
  3. Отправить форму в случае успеха

При нажатии кнопкиGeocode Я хочу, чтобы это сделать следующее (это не работает):

  1. Проверьте, если результат уже привязан к местности с автозаполнения нажмите
  2. Если нет, геокодировать

Итак, мой вопрос: как я могу это сделать, поэтому я могу использовать один и тот же код для обоих сценариев, не повторяя его дважды. Моя идея состояла в том, чтобы сделать следующее:

  • имеет функцию для кнопки «отправить форму», которая включает в себя представивший форму
  • имеет функцию для кнопки геокодирования, которая не включает в себя отправку формы

Я предпочел бы использовать функцию для каждой кнопки, а не использовать какой-то флаг, но я полностью зациклен на том, как реализовать это, каждый раз, когда я работаю над этим, я в конечном итоге полностью нарушаю скрипт. Любая помощь будет высоко оценена, потому что я новичок в javascript, и я немного борюсь с этим.

ответ

1

Если единственное различие заключается в том, что один отправляет, а другой - нет, разрешите передавать обратный вызов в функцию, а тот, который отправляет, может передать представление функции.

+0

Это немного продвинутый для меня, мне нужно немного почитать об этом, потому что я действительно не понимаю обратные вызовы в данный момент. – Jimmy

+0

Дайте мне несколько минут, и я продемонстрирую. На самом деле это довольно простая концепция. –

+0

Ум, ваши две формы идентичны! Вы не можете использовать идентификатор более одного раза на странице. –

Смежные вопросы