【问题标题】:Trigger an anchor, open a modal and go to the anchor inside the modal触发一个锚点,打开一个模态框并转到模态框内的锚点
【发布时间】:2018-04-23 22:45:56
【问题描述】:

我正在尝试做一件奇怪的事情。我将解释一般情况,然后按照我想做的分步程序进行。我在<ul> 中有一个项目列表。当我按下一个元素时,必须打开一个模式。在此模式中,有与 <ul> 相同的元素,但有详细说明。当模式打开时,我希望我在<ul> 中单击的元素将位于modal body 的顶部。基本上是一个锚。现在一步一步来

项目列表 (<li><a href="#some_element"></a></li>) 我点击一个项目(点击我!) 模式打开,显示锚点

start_modal_body

<div id="some_element"></div>
<div id="not_this"></div>
<div id="not_this"></div>
<div id="not_this"></div>

end_modal_body

有什么想法吗?

编辑:

模态和其余代码位于两个单独的文件中

编辑 2:

由于我使用的是淘汰赛,我不能使用 jquery 告诉模态来重定向我,这就是我尝试使用锚点的原因

【问题讨论】:

  • 你问的是下拉菜单吗
  • 不,一个带有锚点的模态框,我希望能够从外部重定向到模态框内的那个锚点,但这似乎是不可能的@ruchikajain
  • 这将需要 JS。您可以使用 Bootstrap 选项卡,如下所示:stackoverflow.com/questions/32028814/…,并将 jquery 解决方案转换为 js/knockout
  • @ZimSystem 这就是重点,我不想要标签,我在正文中有锚点,一旦我点击了模式外部的链接,我想被重定向到那里
  • @ZimSystem Perfect,我认为有两种选择:创建 bindingHandler 或放弃。我不能直接从视图中“获取”模态,我会破坏 MVVM 模式,我需要一个在打开模态后触发的 bindingHandler。问题是模态本身就是一个自定义的 bindingHandler -.-

标签: javascript html bootstrap-4 bootstrap-modal


【解决方案1】:

如果您可以重新排序模态框内锚部分的位置,而不是滚动到顶部,那么这是一个纯 CSS 的答案。

将模态按钮包装在另一个元素上,并使用该元素打开模态。然后链接内的 href 将用于定位适当的锚点...

<span data-target="#myModal" data-toggle="modal"><a href="#a" role="button" class="btn btn-primary">A</a></span>
<span data-target="#myModal" data-toggle="modal"><a href="#b" role="button" class="btn btn-primary">B</a></span>
<span data-target="#myModal" data-toggle="modal"><a href="#c" role="button" class="btn btn-primary">C</a></span>

<div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
            </div>
            <div class="modal-body d-flex flex-column">
                <div id="a">
                    ..
                </div>
                <div id="b">
                    ..
                </div>
                <div id="c">
                    ..
                </div>
            </div>
        </div>
    </div>
</div>

并使用 flexbox order 将目标部分移动到 modal 的顶部...

.modal-body > div:target {
    order:0;
}

.modal-body > div:not(:target) {
    order:1;
}

演示:https://www.codeply.com/go/HraCKrWHII

【讨论】:

  • 这可能是解决方案!我马上试试,应该可以的
猜你喜欢
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多