【问题标题】:Bootstrap modal Replace Button with Link - Dynamic Div IDsBootstrap modal Replace Button with Link - 动态 Div ID
【发布时间】:2014-04-24 18:24:42
【问题描述】:

使用引导程序在动态 php 循环中包含模式。通过从迭代中的每一行添加一个唯一字段来动态更改 div ID,从而实现出色的工作:

foreach($classes as $class => $details)
    {
     $unique = $class->['ID'];
     $name = $class->['Name';
     $description = $class->['Description';

    ?>
    <button class="btn btn-xs" data-toggle="modal" data-target="#myModal<?php echo $sclassid ?>">
<?php echo $name ?></button>
        <!-- Small modal -->
        <div id="myModal<?php echo $sclassid ?>" class='modal fade bs-example-modal-sm' tabindex='-1' role='dialog' aria-labelledby='mySmallModalLabel' aria-hidden='true'>
      <div class='modal-dialog modal-sm'>
        <div class='modal-content'>
                <?php echo $classDescription?>  
            <button type="button" class="btn btn-xs" data-dismiss="modal">Close</button>  
        </div>
      </div>
  </div>

如果您没有生成唯一 ID (#myModal-somevalue),那么每次点击都会打开模态框的每个实例。哎哟。

无论如何 - 我可以将按钮设置为看起来像链接,但有没有办法使用类似于此的链接将相同的信息发送到引导 jscript 代码:

<a href="javascript:void(0)" class="md-trigger" onclick="$('.bs-example-modal-sm').modal('show')"><?php echo $className ?>

添加 data-target="#myModal&lt;?php echo $sclassid ?&gt;" 无效。

是否有任何理由认为其中一种方法会更好。

期待您的见解和反馈。

去阅读 Marijn Haverbeke 的 Eloquent Javascript...

【问题讨论】:

  • 我不确定你的问题到底是什么。你在问什么?
  • @GeorgeMarques 我认为问题是,“有没有比使用 PHP 动态生成唯一 ID 并将按钮设置为看起来像链接更好的方法?”我觉得 ajax 是一种更直接的方法,但我不完全确定为什么(还)。

标签: javascript php jquery css twitter-bootstrap


【解决方案1】:

与其循环遍历模态本身,不如设置 -one- modal,并使用 jQuery 的 ajax() 将另一个页面注入模态容器 - 无需唯一 ID 愚蠢。

我是这样做的(这是在 ColdFusion 中,所以 # 符号等同于 PHP 的变量标记) - 另请注意,这是 Bootstrap 2.1.0,但一些结构/类更改将使其在 3.1 中工作。 1:

这是启动模式的 URL(这可以由您的循环脚本输出,动态设置 url 参数以传递给包含模式内容的脚本):

<a href="/modal/showDocHistory_Modal.cfm?docPropID=#GetMetaData.docPropID#&File=#URLEncodedFormat(name)#" data-target="#histModal" data-toggle="modal" rel="tooltip" data-placement="left" title="Click to view document history" class="btn btn-mini ajax"><i class="icon icon-list-alt"></i></a>

接下来,你有模态的容器:

<!--- DIV container for history modal --->
<div class="modal hide fade" id="histModal" style="width:80%; margin-left:-40%;"></div>

最后,一点 jQuery 来确保传递给 modal 的 URL 是唯一的(否则,在下次启动 modal 时,最后点击的链接总是会出现):

<!--- script to ensure ajax modal always loads currently clicked link --->
<script type="text/javascript">
$(document).ready(function() {
    $.ajaxSetup({ cache: false });
    $('[data-toggle="modal"].ajax').click(function(e) {
      e.preventDefault();
      var url = $(this).attr('href');
      var target = $(this).data('target');
      if (url.indexOf('#') == 0) {
      $(target).modal('open');
      } else {
          $.get(url, function(data) {
                              $(target).html(data);
                              $(target).modal();
          }).success(function() { $('input:text:visible:first').focus(); });
      }
    });
});
</script>

现在,您需要做的就是遍历您的 HREF 并提供参数以提供给包含您的模态内容的外部脚本(外部脚本将只有模态体标签,因为主模态容器将在调用脚本)。

【讨论】:

  • 我认为这是我正在寻找的输入。那么我传递的 URL 是否会是另一个脚本或同一脚本中的另一个函数,它将根据第一个循环生成的参数检索变量并包含在发送的 URL 中?
  • 是的——它们可能来自数据库查询、来自前一个屏幕的表单输入等。另外请注意,模态的“模板”只是外部 DIV——您插入模态的脚本模板将包含模态 HTML 结构的其余部分(希望有意义)
  • 那么模态DIV将被划分,外部DIV在托管脚本上,内部DIV在被调用脚本上?我打开了一个模态体,但里面有一个空的 DIV。 &lt;div class="modal-backdrop fade in"&gt;&lt;/div&gt; 我只使用常规链接进行了测试,并且在被调用页面上看到了所需的数据。控制台中没有 Javascript 错误,我不知道在哪里寻找线索。
  • alert("I am an alert box!"); 添加到故障排除。在$(document).ready(function() { $.ajaxSetup({ cache: false }); 下方弹出但在$('[data-toggle="modal"].ajax').click(function(e) { 之后没有弹出我知道他前两行的意思是“当文档完全加载时执行此功能:1. 设置ajax 并告诉它不要缓存内容”。我猜第三行调用了一个名为 modal 的 ajax 函数或类?
  • link 有一些相关的代码,结合上面的代码大部分都可以工作。将发布解决方案,但目前的问题是模态窗口跨越浏览器窗口的整个宽度,而不是只是一部分。
猜你喜欢
  • 2020-09-28
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 2019-06-03
  • 2018-04-24
相关资源
最近更新 更多