javascript - 如果我单击一下,按钮不会重定向到链接
问题描述
验证数据后,我在表单上有一个按钮,可将页面重定向到另一个网站。只有在验证了这些数据时,按钮的 href 才具有信息,否则将为空。
问题是,即使一切运行正常,用户要被重定向到页面,也需要在按钮上单击两次,我不知道为什么。
我传递了html表单的格式,验证数据的函数,然后是捕获数据的部分和填充按钮的href。所有这一切都以非常概括的方式与相关的事情。
表单 HTML:
<form id="formTarjeta" class="formPayu" onsubmit="return registroCompraTarjeta()">
<p><strong>Dirección de envío</strong></p>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">
<i class="glyphicon glyphicon-home"></i>
</span>
<input type="text" class="form-control" id="registroDireccionTarjeta" name="registroDireccionTarjeta" placeholder="BUSQUE y SELECCIONE su dirección" required>
</div>
</div>
<div class="clearfix"></div>
<a class="btn btn-block btn-lg btn-default backColor btnPayu" id="load" data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> PROCESANDO">CONFIRMAR DATOS</a>
</form>
JS中的验证函数
function registroCompraTarjeta(){
var direccionTarjeta = $("#registroDireccionTarjeta").val();
if(direccionTarjeta == ""){
swal('WARNING', 'warning');
return false; }
return true;
}
数据捕获和更改 HREF 按钮
$("#formTarjeta").on('click','.btnPayu',function(e){
if (registroCompraTarjeta() == true) {
//CAPTURE DATA FORM AND CREATE AN ARRAY TO SEND BY AJAX
if(...){
$.ajax({
url:"ajax/cart.ajax.php",
method:"POST",
data: array,
cache: false,
contentType: false,
processData: false,
success:function(response){
$('.btnPayu').attr('href', response);
$('.btnPayu').on('click', function() {
var $this = $(this);
$this.button('loading');
setTimeout(function() {
$this.button('reset');
}, 4000);
});
}
})
} else {
...
}
}
解决方案
问题是 AJAX 请求是异步运行的。直到点击事件被完全处理后它才会改变href
,因此它不会影响点击的处理方式。
而不是更改href
,分配给window.location
重定向到新页面。
$.ajax({
url: "ajax/cart.ajax.php",
method: "POST",
data: array,
cache: false,
contentType: false,
processData: false,
success: function(response) {
window.location = response;
}
})
推荐阅读
- javascript - 是否可以从库中定位样式化组件的子组件?
- php - 使用 PHP 在 while 循环中显示单个列
- javascript - 如何隐藏最后三里形式的ul?
- javascript - Map 或 flatmap 的工作方式类似于 Javascript 中的 Array.prototype.join
- log4j2 - 将 prometheus LOG4j conf 从 XML 转换为属性文件
- c# - 如何使用 linq 从嵌套字典中选择所有值?
- angular - 如何制作 Angular CLI 版本 index.html 来克服客户端缓存问题?
- c# - 如何使用单个字段连接将 SQL 转换为 LINQ?
- android - 在没有 Camera2 API 的情况下将 ImageReader 表面用于视频流
- crc - 识别使用的 CRC-16 算法