【发布时间】:2022-01-07 12:50:56
【问题描述】:
我想控制一个链接是可点击还是显示错误(基于 ajax 调用的结果)。
<a class="lnkCustomer" href="http://localhost/viewcustomer" target="_blank" data-customerno="237">View</a>
我可以将链接设置为“允许点击”:
// Authorized
anchor.data("authorized", true);
但是,当我运行此代码时,链接仍然无法打开。理想情况下,一旦 ajax 调用完成,它应该调用 click 事件。我认为问题出在这一行。
// Trigger Anchor
anchor.click();
这是完整的代码:
<script type="text/javascript">
$(".lnkCustomer").click(function(e)
{
var customerNo = $(this).data('customerno');
var anchor = $(this);
// Check for authorized
if (anchor.data("authorized"))
{
return true;
}
$.ajax(
{
url: 'http://localhost/checkcustomer',
type: 'POST',
dataType: 'json',
data: { customerNo: customerNo },
cache: false,
success: function (result)
{
if (result.success)
{
// Authorize
anchor.data("authorized", true);
// Trigger Anchor
anchor.click();
}
else
{
// Show a message in a alert or div
alert('Not authorized');
}
}
});
// Default to false (Do not process anchor)
return false;
});
</script>
注意:我在锚点中使用 class 而不是 id,因为我有各种链接会触发此事件。但是,正如您所看到的,这应该不是问题,因为我总是指的是单个对象:
var anchor = $(this);
【问题讨论】:
-
您是在使用此检查来增强用户体验,还是打算将其用作防止未经授权访问的安全机制?如果是后者,那么这需要由您的服务器而不是您的客户端代码来处理。使用当前的解决方案,用户可以右键单击链接并在新选项卡中打开它,或者直接导航到您的 URL,绕过任何这些检查。
标签: javascript html jquery ajax