【问题标题】:Load a href into a div when pressing a link?按下链接时将href加载到div中?
【发布时间】:2015-05-29 20:23:03
【问题描述】:

我知道之前有人问过这个问题,我尝试按照建议的方法进行操作,但似乎无法正常工作。

基本上我有这样的链接:

<ul>
    <li class='current'><a href='portfolio/index.html'>portfolio</a></li>
    <li><a href='about/index.html'>about</a></li>
</ul>

然后我有一个这样的 div:

<div class='loaded_content'></div>

我想要做的是,当我按下链接时,将链接 href 中的页面加载到 div 中。我还想阻止浏览器以正常方式导航链接。

这是我的脚本,它与 jquery 库一起加载到 html 标头中:

$(document).ready(function() {
    $('a').click(function(event){
        event.preventDefault();
        $('.loaded_content').load($(this).attr('href'));
        return false;
    });
});

我做错了什么?

编辑:

好的,所以我将脚本放入 document.ready 中,并且 preventdefault 现在正在工作,但 href 仍未加载到 div 中。

编辑:

好的,我现在已经完成了部分工作。 html 现在已正确加载到 div 中,但我现在面临一个新问题。我正在加载的页面与它自己的 .css 文件和一些图像一起位于一个子目录中。如何确保 css 也被加载?

我想这样做的原因是因为我网站上的页面在所有页面上都具有相同的结构,并且我想要像框架网站一样,我只加载每个页面的内容以防止加载相同事情一遍又一遍。也许还有另一种更好的方法?

【问题讨论】:

  • 有什么问题?当用户点击链接时会发生什么?
  • 当我点击链接(在 Chrome 中)时,它会像往常一样进入链接 href。
  • 请在onClick的函数中添加一个alert,并告诉我们这个函数是否被调用(如果点击链接时会显示alert)
  • 尝试发出警报,没有。
  • 张贴小提琴,让人们可以看到并提供帮助。

标签: javascript jquery html


【解决方案1】:

我认为问题在于没有调用该函数。

如果您尝试将函数绑定到某些元素,而这些元素尚未在文档中,则可能会发生这种情况。你说这段代码是header,所以,我认为是这样的。

至少有两种选择:

首先:在 document.ready 函数中编写您的 javascript 代码:

$(document).ready(function(){
   // your on click function here
   $('a').click(function(){
       $('.loaded_content').load($(this).attr('href'));
       return false;
   });
});

第二:移动你的javascript代码,写在链接后面。

【讨论】:

  • 我刚试过这个。因此,我将脚本放入准备好的文档中,现在我知道正在调用该函数,因为它不再将链接导航到 href。但是,href 似乎没有加载到 div 中。
  • 页面被重定向了?
  • 不不,preventdefault 正在工作,但 href 页面没有加载到 .loaded_content div 中。
  • XMLHttpRequest 无法加载 file:///E:/​​Coding/HTML/portfolio/index.html。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource.jquery_1.8.3.js - 这是什么意思?
【解决方案2】:
$(document).on('click', 'a', function(e){
    e.preventDefault();
    $('.loaded_content').load($(this).attr('href'));
});

http://api.jquery.com/load/

【讨论】:

    【解决方案3】:

    将 jQuery 库添加到文档中。根据小提琴,你错过了。

    【讨论】:

      【解决方案4】:

      通过您的网络服务器打开文件,例如

      http://localhost/someFile.html

      默认情况下,Chrome 不允许对“file:///”网址进行 AJAX 请求。使用http://localhost/的路径

      【讨论】:

        【解决方案5】:

        您可以使用event.preventDefault(); 来阻止链接的默认行为:

        $('a').click(function(event){
            event.preventDefault();
            $('.loaded_content').load($(this).attr('href'));
        });
        

        确保这段代码要么包裹在$(document).ready();中,要么放在你的html底部,否则点击事件不能附加到链接上,因为它们需要先处理。

        【讨论】:

        • 这对我来说似乎没有什么不同。
        • 那么你有一个不同的问题,这里是一个工作 jsfiddle:jsfiddle.net/8k2ppn5x/1
        【解决方案6】:

        试试preventdefault()

        $('a').click(function(e){
        e.preventDefault ();
            $('.loaded_content').load($(this).attr('href'));
            return false;
        });
        

        【讨论】:

        • 这对我没有任何影响。
        • 发布一个小提琴,让我们看看发生了什么。
        【解决方案7】:

        更改此链接

        <a href='javasctipy:;' data-link='portfolio/index.html'>portfolio</a>
        

        然后

        $('a').click(function(){
          document.getElementById("loaded_content").innerHTML='<object type="text/html" data="'+$(this).attr('data-link')+'" ></object>';
        });
        

        【讨论】:

        • 不太适合 SEO 或可访问性(屏幕阅读器)创建这样的 href
        猜你喜欢
        • 2012-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 2015-07-24
        相关资源
        最近更新 更多