【问题标题】:Show popup with image on-click单击时显示带有图像的弹出窗口
【发布时间】:2014-08-09 17:23:46
【问题描述】:

我有一个包含 BookList 的 MVC 5 应用程序。在剃刀视图中,通过将 ISBN 发送到亚马逊来显示每本书的封面:

<img id="@item._id" class="img img-responsive img-thumbnail" style="max-width: 110px" src=@string.Format("http://images.amazon.com/images/P/{0}.01.mzzzzzzz", @item.isbn)>

这些图像在foreach 循环中偏离了轨道:

@foreach (var item in Model) {...}

我想要做的是,使用 jquery,在弹出窗口中显示封面的放大版本。为此,我一直在关注我在网上某处找到的解决方案。为了使点击生效,我使用了分配给图像的类:

$(".img").click(function () {
    if ($(this).hasClass("selected")) {
        deselect();
    } else {
        $(this).addClass("selected");
        $(".pop").slideFadeToggle(function () {
        });
    }
    return false;
});

在此函数中应用或删除一个 css 类,它将显示或隐藏包含放大图像的 div:

<div class="messagepop pop">
    <img id="@item._id" class="img" src=@string.Format("http://images.amazon.com/images/P/{0}", @item.isbn)>
</div>

我面临的问题是单击图像,该类将应用于列表中带有.img 的所有图像,并显示所有放大的封面。我需要以某种方式识别被点击的特定图像。我认为这可以通过 $(this) 来实现,但显然不是。

【问题讨论】:

  • 你能在这里提供更多的html代码吗

标签: jquery css asp.net-mvc image razor


【解决方案1】:

您现在遇到的问题是因为 $(this) 引用了所有具有类 .img 的元素。因此,您没有定位调用点击事件的元素。

试试下面的代码,让我知道它是否有效。

$(".img").click(function (evt) {
    var clicked = evt.target.id;
    if ( $('#' + clicked).hasClass("selected") ) {
       deselect();
    } else {
       $('#' + clicked).addClass("selected");
       $('.pop #' + clicked).parent().slideFadeToggle();
    }
    return false;
});

【讨论】:

  • 谢谢。你让我走上正轨。我确实对$(".pop").slideFadeToggle(function () {}); 仍然有问题,仍然使用类 pop 对所有 div 起作用。我所做的是给 div 一个 ID id=@string.Format("Pop{0}", item._id) 然后使用它:$("#Pop" + clicked).slideFadeToggle(function () { });
  • 我已经编辑了答案。您将需要使用 parent() 函数向上遍历一个以找到 .pop 元素。干杯!
  • 问题是,点击的图片不在 .pop 的 div 内 - 有 2 张图片。被点击的较小的和显示的 div 中的较大的
  • 我再次编辑了答案。让我知道它是否有效。
猜你喜欢
  • 2021-04-26
  • 2015-06-27
  • 2015-07-09
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多