【问题标题】:jquery load image to div after clicking href单击href后jquery将图像加载到div
【发布时间】:2014-11-30 04:15:38
【问题描述】:

我知道这个问题在这里被问过很多次,实际上我发现了很多问题,每个问题都有一个很好的答案,我也遵循了这些答案,使用了我找到的不同方式,但我仍然不明白工作。

我要做的是在单击链接后将图像加载到 div 中,而不是重定向到新页面。

我正在使用 Pure Css (http://purecss.io/) 创建一个菜单,该菜单由一个列表组成,每个列表项内部都有一个链接,如下所示:

<div class="pure-menu pure-menu-open" id="vertical-menu">
     <a class="pure-menu-heading">Models</a>
     <ul id="std-menu-items">
         <li class="pure-menu-heading cat">Menu heading</li>
         <li><a href="path_to_image"  class="model-selection">Model 1</a></li>
     </ul>
</div>

在同一个 html 文件中,我有另一个要加载图像的 div:

<div id="model-map"></div>

我已经尝试了以下方法,使用 jquery,在一个单独的 js 文件中:

我按照这个问题的选定答案,似乎有最好的方法 (Can I get the image and load via ajax into div)

$(document).ready(function(){
    console.log("ready"); //this shows on console
    $('.model-selection').click(function () {
        console.log("clicked"); //this doesn't show after clicking
        var url = $(this).attr('href'),
        image = new Image();
        image.src = url;
        image.onload = function () {
            $('#model-map').empty().append(image);
        };
        image.onerror = function () {
            $('#model-map').empty().html('That image is not available.');
        }

        $('#model-map').empty().html('Loading...');

        return false;
    });
});

如您所见,console.log("clicked") 永远不会执行,如果它很愚蠢,我会感到羞耻,因为该函数似乎没有正确处理单击事件。 我当然得到了图像,但是在一个新页面中(单击 href 的默认行为),我希望它在不被重定向的情况下加载到 div 上。我希望你能帮助我。 提前致谢!

编辑

上面的代码正在运行,两个答案都是正确的,问题是由于我的 html 中的标签内的一些代码(用于为菜单创建下拉菜单的 YUI 代码)并且它与我的 js 文件冲突。我将它移到了实际的 js 文件中,现在它可以按预期工作了。 谢谢!

【问题讨论】:

  • 使用 html5 文件 api 将图像二进制文件直接从文件输入读取到 base64 数据 uri,然后您可以将其设置为图像的 src 属性。它很容易。谷歌它

标签: javascript jquery html css ajax


【解决方案1】:

你需要使用 event.stopPropagation();

$('.model-selection').click(function( event ) {

    event.stopPropagation();
    // add your code here

});

【讨论】:

  • 谢谢!正如我对 Spencer 所说,我尝试使用 preventDefault 和 stopPropagation,但我仍然被重定向到新页面。我认为我的代码可能有问题,但尚未发现错误
  • 您是否看到您的控制台上是否出现任何错误?可能有一些错误导致 jQuery 失败
  • jsfiddle.net/jdelva/zsm4zqk8/1 到目前为止没有错误,它适用于 jsfiddle,我正在查看我的每一寸 html 和 js 文件以查看 WTF 正在进行
  • 你在里面添加了上面的代码吗? $(document).ready(function () { });
  • 是的先生,我发现了错误,我在
【解决方案2】:

您只需要阻止默认行为为&lt;a&gt; 标签移动到新页面,首先要说e.preventDefault()

...
$('.model-selection').click(function (e) {
    e.preventDefault(); // Stops the redirect
    console.log("clicked"); // Now this works
    ...
)};
...

【讨论】:

  • 感谢您的回答,我尝试使用 preventDefault 和 stopPropagation 但我仍然被重定向到新页面。可能出了什么问题?
  • @dlvx 你添加了function (e)吗?
  • 是的,先生,按照您的回答,但仍然无法正常工作,所以我认为我的代码可能是其他问题
  • @dlvx 这很奇怪。 return false 单独应该阻止重定向。我能想到的唯一一件事是您可能没有单击类.model-selection 的元素,或者旧页面正在缓存中出现。或者您的代码或加载 jQuery 中可能存在错误(检查控制台)。您是否可以使用jsfiddle 重新创建此问题?
  • jsfiddle.net/jdelva/zsm4zqk8/1 就是这样,它有效,我删除了一些列表项,因为菜单更大,奇怪的是所有列表项都不起作用,但它使用较少的项目。我现在不知道是不是我的html有问题,也许是一些标签。我得仔细看看。
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 2016-12-01
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2013-03-10
相关资源
最近更新 更多