Javascript 在Sennajs中防止点击链接跳到页面顶部

Javascript 在Sennajs中防止点击链接跳到页面顶部,javascript,senna.js,Javascript,Senna.js,我是javascript的新手,所以如果我问一些显而易见的问题,请原谅 我正在使用我的个人项目。我有一个问题,像在。单击链接时,页面会跳转到顶部。我曾经使用jquery中的这段代码来修复它。然而,它也阻止了塞纳的工作 $('a').click(function(e) { // do something return false; e.preventDefault(); }); 任何帮助都将不胜感激。在实际调用preventDefault之前,请返回return。以下工

我是javascript的新手,所以如果我问一些显而易见的问题,请原谅

我正在使用我的个人项目。我有一个问题,像在。单击链接时,页面会跳转到顶部。我曾经使用jquery中的这段代码来修复它。然而,它也阻止了塞纳的工作

$('a').click(function(e) {
    // do something 
    return false;
    e.preventDefault();
});

任何帮助都将不胜感激。

在实际调用
preventDefault
之前,请返回
return
。以下工作将起作用:

$(function(){
      $('a').click(function(e) {
         e.preventDefault();
         return false;
      });
    });

代码不起作用的原因是,您在执行任何操作之前返回了

$('a').click(function(e) {
    e.preventDefault();
    // do something 
    return false;
});

所以,在你阻止正常行为之后,先做点什么

事实证明,在每次SennaJS导航后,您都可以使用来避免跳到页面顶部:

var app = new senna.App();
app.setUpdateScrollPosition(false);

// ...your code here...

旧解决方案(不推荐): 注意:由于我在了解
app.setUpdateScrollPosition(false)
之前编写了此解决方案,因此该解决方案不必要地过于复杂

您可以在导航前保存当前滚动位置,并在导航后滚动到正确位置,而不是阻止SennaJS执行:

var app = new senna.App();

// ...your code here...

function getScrollTop() {

    // Taken from Engineer's answer:
    // https://stackoverflow.com/questions/11193453/find-the-vertical-position-of-scrollbar-without-jquery#11193613
    return (window.pageYOffset !== undefined) ? window.pageYOffset :
        (document.documentElement || document.body.parentNode || document.body).scrollTop;
}

var scrollTop = getScrollTop();

app.on('beforeNavigate', function(event) {
    scrollTop = getScrollTop();
});

app.on('endNavigate', function(event) {
    window.scrollTo(0, scrollTop);
});
有关滚动位置和JavaScript的更多信息,请参阅的和

有关SennaJS生命周期事件的更多信息,请参阅


注意:这可能是SennaJS中的一个bug,所以我创建了它。

是的。然而,我不知道如何让Sennajs做点什么。这是我的问题。请帮忙。那就不要把它当作链接…?谢谢你提供的信息。出于SEO原因,我必须使用链接:(是的。但是,我不知道如何让//用Sennajs做点什么。这是我的问题。请帮助。你到底想做什么?我建议只显示更多代码,这样我们就可以看到我在问题中提到的真实问题。他们的示例库也有这个问题。当你点击任何图像链接时,它会跳到页面顶部。你可以在这里找到它。)你在页面顶部的意思是什么。似乎每次单击图像时,新页面都会加载该照片。这是ajax。它不会加载完全新的页面。你可以通过打开浏览器检查工具了解这一点。