javascript - Why can't I trigger default click after acquiring more parameters for an href via AJAX? -
i trying search vendors within mileage radius, in order need coordinates address i'm searching. it's not feasible grab these coordinates front because map search isn't used often.
so, want grab coordinates google maps when link clicked (if haven't gotten them already), then continue default browser behavior. code have accomplish this:
html
<a href="/vendors/search" target="_blank" class="vendormapsearch" data-miles-radius="50" data-address="@model.address.singleline()" data-customer-name="@model.customername" data-customer-id="@model.customerid" data-service-on="@model.serviceon">vendor map search</a>
javascript
$(document).on('click', 'a.vendormapsearch', function (e) { console.log('handle click'); var $target = $(e.target), data = $target.data(); if (!data.latitude || !data.longitude) { console.log('hitting google maps'); var url = 'https://maps.googleapis.com/maps/api/geocode/json?language=en&sensor=false&address=' + data.address; $.getjson(url, function (resp) { console.log('response received'); if (!resp.results.length) { $('<div>could not find coordinates address entered.</div>'); return; } $target.data('latitude', resp.results[0].geometry.location.lat); $target.data('longitude', resp.results[0].geometry.location.lng); $target.attr('href', $target.attr('href') + '?' + $.param($target.data())); $target.trigger('coordinatesacquired'); }); return false; } console.log('returning true'); return true; }); $(document).on('coordinatesacquired', function() { console.log('coordinates acquired'); $('a.vendormapsearch').trigger('click'); });
it gives output:
handle click hitting google maps xhr finished loading: (blah blah) coordinates acquired handle click returning true
it looks correct me, behavior not trigger default link browser behavior (in chrome @ least) unless click link second time. know what's this?
trigger doesn't click on a
, launch listener. default behavior triggering, here can do. can check in event handler if click triggered , manually change page :
if(e.istrigger) window.location = this.href
or open in window :
if(e.istrigger) window.open(this.href, '_blank ')
Comments
Post a Comment