Javascript 锚定标记刷新页面

Javascript 锚定标记刷新页面,javascript,jquery,html,Javascript,Jquery,Html,我的锚定标记有问题,我用append jQuery填充我的html表,在td中,当我单击锚定标记而不是调用它的函数时,它会刷新页面: $('.show directions')。单击(函数(事件){ event.preventDefault(); $('.ui.modal').modal('show'); setTimeout(函数(){ initMap(); }, 500); }); 函数initMap(){ log(“initMap已被调用。”); } 如您所见(在我对您的问题进行编辑

我的锚定标记有问题,我用append jQuery填充我的html表,在td中,当我单击锚定标记而不是调用它的函数时,它会刷新页面:

$('.show directions')。单击(函数(事件){
event.preventDefault();
$('.ui.modal').modal('show');
setTimeout(函数(){
initMap();
}, 500); 
});
函数initMap(){
log(“initMap已被调用。”);
}

如您所见(在我对您的问题进行编辑后),假设您正确引用了引导库,那么您的代码将正常工作。因此,您的问题必须与页面上的其他内容有关

您已经指示要使用
.append()
动态添加
元素。在这种情况下,在将元素添加到文档之前,将注册
单击
事件处理程序。为确保事件得到处理,请使用,这是在文档中的较高级别元素(在事件注册时存在)上设置事件处理程序的过程,然后当事件稍后由较低级别的元素启动时,事件冒泡会导致事件到达较高级别的元素。然后检查是什么元素引发了事件

说到这里,您首先不应该使用
a
元素用于导航,而不是用于JavaScript的挂钩。对非导航任务使用超链接在语义上是不正确的。它会给使用辅助技术(如屏幕阅读器)上网的用户带来问题,并且(正如您已经知道的,给定您的代码)要求您通过添加
event.preventDefault()
来禁用浏览器的本机导航愿望

而是使用其他元素来触发函数,如
span
元素:

//在文档级别截取事件,但检查是否
//它源于具有.show direcions类的元素
$(文档,'.show directions')。单击(函数(事件){
$('.ui.modal').modal('show');
setTimeout(函数(){
initMap();
}, 500);
});
函数initMap(){
log(“initMap已被调用。”);
}

详细信息
在脚本
$(function(){$(“#AnchorTagID”))中添加此项。单击(function(){return false;});})或使用
在此处添加锚属性


或者,您可以添加
href=“#”
而不是空href,或者从中完全删除它。

将您的代码更改为以下内容:

$(document).on('click', '.show-directions', function(){ 
   //YourCode
}); 
它应该会起作用

关于这个问题的解释,请阅读@Optimus Prime answer's here:

我做了其他事情

<a class="show-directions" href="javascript:tacos();" >

还有一个额外的>什么是
modal()
?你在使用引导程序吗?你加载jQuery了吗?这是一个灰色窗口background@ScottMarcus我认为编辑会损坏帖子。@showdev我的代码不会修复或更改此问题。这说明了一个事实,这里有一个不同的问题。很好的建议,但这并不能真正回答关于OP当前代码的问题。@showdev答案的第一句话肯定回答了。我试过了,但问题是一样的,我认为它不能与Span通话,不。OP似乎试图使用
preventDefault
来阻止链接被跟踪,但它不起作用。@MehdiAmmar,那么,请编辑您的问题以显示代码。同意,只是从帖子中粘贴了它,并更新了我的答案。您的答案仍然使用内联JavaScript。好的,但是现在您的答案与OP在
event.preventDefault()
中所做的一样。再次编辑,我希望这能满足问题。抱歉,您一直在提供与问题无关的答案。问题不是取消锚定单击。问题是锚点没有正确注册click事件处理程序。您的答案与问题无关。虽然这可能“有效”,但在语义、可访问性和最佳实践方面是不正确的。JavaScript不应与HTML内联,并且
a
元素不应用于非导航任务。请参阅我的最新答案。
function tacos () {
        $('.ui.modal').modal('show');
        setTimeout(function() {

            initMap();
        }, 2000);
    }