为什么在通过 AJAX 获取 href 的更多参数后无法触发默认单击
Why can't I trigger default click after acquiring more parameters for an href via AJAX?
我正在尝试搜索里程半径内的所有供应商,但为了做到这一点,我需要我正在搜索的地址的坐标。 预先获取这些坐标是不可行的,因为地图搜索并不经常使用。
所以,我想做的是在点击链接时从谷歌地图中获取坐标(如果我们还没有得到它们),然后继续默认的浏览器行为。 这是我必须完成此操作的代码:
.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 for the 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');
});
它给出以下输出:
HANDLE CLICK
HITTING GOOGLE MAPS
XHR finished loading: (blah blah)
COORDINATES ACQUIRED
HANDLE CLICK
RETURNING TRUE
对我来说它看起来是正确的,但行为是它不会触发默认的链接浏览器行为(至少在 Chrome 中),除非我第二次单击该链接。 有谁知道这是怎么回事?
触发器
并没有真正点击a
,它只是启动侦听器。默认行为是触发,但在这里你可以做什么。如果单击被触发,您可以签入事件处理程序,然后手动更改页面:
if(e.isTrigger) window.location = this.href
或在另一个窗口中打开:
if(e.isTrigger) window.open(this.href, '_blank ')
相关文章:
- 如何根据在模式中单击的按钮发送参数
- 如何根据单击的按钮发送id参数
- 将参数传递给reactjs单击处理程序
- 如何在jRate插件上设置readOnly;单击一颗星后的参数
- jQuery UI 选项卡 - 将参数设置为下一个/上一个按钮单击
- 传入 javascript 单击事件的参数
- iframe src 使用现有值在单击时添加自动播放=true 参数
- 在页面加载时调用函数,在按钮单击时再次调用函数,但参数不同
- jQuery使用最后一个参数在Javascript循环中单击绑定函数
- 单击时在参数之间切换的最佳方式
- 通过事件触发器/按钮单击将参数传递给 javascript 函数
- 防止单击和检索函数调用的参数
- 单击网址时抓取网址参数.Jquery,Javascript
- j查询触发器单击如果 URL 包含参数
- 单击窗口.位置,参数已传递
- 为什么在通过 AJAX 获取 href 的更多参数后无法触发默认单击
- 将参数传递给单击处理程序
- 单击时更新参数
- 如何在电话间隙中单击 href 链接时通过 url 传递参数
- 传递参数单击函数