在引导程序弹出窗口中包含表单?

IT技术 javascript jquery twitter-bootstrap twitter-bootstrap-3 popover
2021-01-23 20:45:11
<div class="container">
    <div class="row" style="padding-top: 240px;">
        <a href="#" class="btn btn-large btn-primary" rel="popover"
            data-content="<form><input type="text"/></form>"
            data-placement="top" data-original-title="Fill in form">Open form</a>
    </div>
</div>

JSfiddle

我猜我会将表单内容存储在 javascript 函数中...

如何在引导弹出窗口中包含表单?

6个回答

我会将我的表单放入标记中,而不是放入某些数据标签中。这是它的工作方式:

JS代码:

$('#popover').popover({ 
    html : true,
    title: function() {
      return $("#popover-head").html();
    },
    content: function() {
      return $("#popover-content").html();
    }
});

HTML 标记:

<a href="#" id="popover">the popover link</a>
<div id="popover-head" class="hide">
  some title
</div>
<div id="popover-content" class="hide">
  <!-- MyForm -->
</div>

演示

替代方法:

X-可编辑

您可能想看看X-Editable一个允许您基于弹出框在页面上创建可编辑元素的库。

X-可编辑演示

网络组件

Mike Costello 发布了Bootstrap Web Components这个漂亮的库有一个 Popovers 组件,可让您将表单嵌入为标记:

<button id="popover-target" data-original-title="MyTitle" title="">Popover</button>

<bs-popover title="Popover with Title" for="popover-target">
  <!-- MyForm -->
</bs-popover>

演示

不错的解决方案,我只是将标题data-title="Some Title"放在<a id="myID">标签内,因为没有额外的 div ...
2021-03-17 20:45:11
你为什么不使用:angular-ui.github.io/bootstrap/#/popover它应该可以解决您的问题。
2021-03-23 20:45:11
请阅读:getbootstrap.com/javascript/#popovers您正在寻找该trigger选项。( trigger: 'focus')
2021-03-27 20:45:11
是的,很棒的答案。不得不说。一次又一次!非常感谢。
2021-03-31 20:45:11
@HaNdTriX +10 就像你说的那样。
2021-04-11 20:45:11

要么type="text"在单引号内替换双引号,例如:

"<form><input type='text'/></form>"

或者

用单引号替换双引号data-content,例如:

data-content='<form><input type="text"/></form>'
不要忘记按钮标签中的“data-html='true'”
2021-03-31 20:45:11
从 Bootstrap >= 3.4 开始,您还需要 {sanitize: false} 作为初始化选项
2021-03-31 20:45:11
<a data-title="A Title" data-placement="top" data-html="true" data-content="<form><input type='text'/></form>" data-trigger="hover" rel="popover" class="btn btn-primary" id="test">Top popover</a>

只需说明 data-html="true"

像这样工作演示 http://jsfiddle.net/7e2XU/21/show/# * 更新:http : //jsfiddle.net/kz5kjmbt/

 <div class="container">
    <div class="row" style="padding-top: 240px;"> <a href="#" class="btn btn-large btn-primary" rel="popover" data-content='
<form id="mainForm" name="mainForm" method="post" action="">
    <p>
        <label>Name :</label>
        <input type="text" id="txtName" name="txtName" />
    </p>
    <p>
        <label>Address 1 :</label>
        <input type="text" id="txtAddress" name="txtAddress" />
    </p>
    <p>
        <label>City :</label>
        <input type="text" id="txtCity" name="txtCity" />
    </p>
    <p>
        <input type="submit" name="Submit" value="Submit" />
    </p>
</form>
 data-placement="top" data-original-title="Fill in form">Open form</a>

    </div>
</div>

JavaScript 代码:

    $('a[rel=popover]').popover({
      html: 'true',
      placement: 'right'
    })

截屏

工作更新的小提琴屏幕截图

此解决方案适用于当前的 Chrome 并回答了问题。但是,在 html 属性中使用复杂的标记可能容易出错,并且会增加代码的可维护性和可学习性风险。
2021-04-02 20:45:11
@DERIIIFranz 感谢它现在修复:jsfiddle.net/kz5kjmbt CDN 丢失,结帐更新链接和屏幕截图。:)
2021-04-03 20:45:11

您可以div使用 Bootstrap 提供的hidden从隐藏元素加载表单

<button class="btn btn-default" id="form-popover">Form popover</button>

<div class="hidden">
  <form id="form">
    <input type="text" class="form-control" />
  </form>
</div>

JavaScript:

$('#form-popover').popover({
    content: $('#form').parent().html(),
    html: true,
});
如果您进行克隆,您还可以使用<template>元素而不是隐藏元素。
2021-03-31 20:45:11
替换$(...).parent().html()$(...).clone();)
2021-04-11 20:45:11