Berisi formulir dalam popover bootstrap?

95
<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

Saya menduga bahwa saya akan menyimpan konten formulir dalam fungsi javascript ...

Bagaimana cara memuat formulir dalam bootstrap popover?

pengguna1438003
sumber

Jawaban:

50

Ganti tanda kutip ganda type="text"dengan tanda kutip tunggal, Suka

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

ATAU

ganti pembungkus tanda kutip ganda data-contentdengan tanda kutip tunggal, Suka

data-content='<form><input type="text"/></form>'
AdityaParab
sumber
17
jangan lupa "data-html = 'true'" di tag tombol
cwirz
275

Saya akan memasukkan formulir saya ke markup dan bukan ke beberapa tag data. Beginilah cara kerjanya:

Kode JS:

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

Markup 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>

Demo

Pendekatan Alternatif:

X-Dapat diedit

Anda mungkin ingin melihat X-Editable . Perpustakaan yang memungkinkan Anda membuat elemen yang dapat diedit pada halaman Anda berdasarkan popovers.

Demo X-Diedit

Komponen web

Mike Costello telah merilis Komponen Web Bootstrap . Perpustakaan bagus ini memiliki Komponen Popovers yang memungkinkan Anda menyematkan formulir sebagai markup:

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

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

Demo

HaNdTriX
sumber
1
Solusi bagus, saya hanya meletakkan judul data-title="Some Title"di dalam <a id="myID">tag karena tidak memiliki div tambahan ...
pebbo
1
Satu-satunya jawaban yang benar.
poitroae
1
@HaNdTriX +10 untuk cara Anda mengatakannya.
2sb
1
Silakan baca: getbootstrap.com/javascript/#popovers Anda sedang mencari triggeropsi. ( trigger: 'focus')
HaNdTriX
1
Mengapa Anda tidak menggunakan: angular-ui.github.io/bootstrap/#/popover ? Ini harus menyelesaikan masalah Anda.
HaNdTriX
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>

sebutkan saja data-html = "true"

zainiafzan
sumber
5

seperti demo Kerja ini http://jsfiddle.net/7e2XU/21/show/# * Update: 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>

Kode JavaScript:

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

ScreenShot

berfungsi screenshot biola diperbarui

Tats_innit
sumber
@DERIIIFranz Terima kasih sudah diperbaiki sekarang: jsfiddle.net/kz5kjmbt CDN hilang, periksa tautan dan tangkapan layar yang diperbarui. :)
Tats_innit
Solusi ini berfungsi di Chrome saat ini dan menjawab pertanyaan tersebut. Namun, memiliki markup kompleks dalam atribut html mungkin rawan kesalahan dan menambah risiko pada pemeliharaan dan kemampuan belajar kode.
Ricardo
4

Anda dapat memuat formulir dari divelemen tersembunyi dengan hiddenkelas yang disediakan Bootstrap .

<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,
});
Fred
sumber
1
Ganti $(...).parent().html()dengan $(...).clone();)
Rhys Bradbury
3

Atau coba yang ini

Yang kedua termasuk konten div tersembunyi kedua untuk menampung formulir yang berfungsi dan menguji biola http://jsfiddle.net/7e2XU/21/

<link href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">
   <script src="http://twitter.github.com/bootstrap/assets/js/bootstrap-tooltip.js"></script>
    <script src="http://twitter.github.com/bootstrap/assets/js/bootstrap-popover.js"></script>


<div id="popover-content" style="display: none" >
    <div class="container" style="margin: 25px; ">
    <div class="row" style="padding-top: 240px;">
        <label id="sample">
            <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>

        </label>
    </div>
          </div> 
</div>

 <a href="#" style="margin: 40px 40px;" class="btn btn-large btn-primary" rel="popover" data-content='' data-placement="left" data-original-title="Fill in form">Open form</a>


<script>

$('a[rel=popover]').popover({
    html: 'true',
placement: 'right',
content : function() {
    return $('#popover-content').html();
}
})



</script>
ivan ivan
sumber
Ini adalah solusi yang bagus tetapi tautan jsfiddle Anda tampaknya tidak sesuai dengan implementasi yang sama. Anda menemukan plunk ini yang saya buat yang mengimplementasikannya dengan benar: plnkr.co/edit/IV2YbLCFSiYI0T1mXOLN?p=preview .
bernardn
2

Solusi lengkap untuk siapa saja yang mungkin membutuhkannya, saya telah menggunakan ini dengan hasil yang bagus sejauh ini

JS:

$(".btn-popover-container").each(function() {
    var btn = $(this).children(".popover-btn");
    var titleContainer = $(this).children(".btn-popover-title");
    var contentContainer = $(this).children(".btn-popover-content");

    var title = $(titleContainer).html();
    var content = $(contentContainer).html();

    $(btn).popover({
        html: true,
        title: title,
        content: content,
        placement: 'right'
    });
});

HTML:

<div class="btn-popover-container">
    <button type="button" class="btn btn-link popover-btn">Button Name</button>
    <div class="btn-popover-title">
        Popover Title
    </div>
    <div class="btn-popover-content">
        <form>
          Or Other content..
        </form>
    </div>
</div>

CSS:

.btn-popover-container {
    display: inline-block;
}


.btn-popover-container .btn-popover-title, .btn-popover-container .btn-popover-content {
    display: none;
}
Sam
sumber
1

Saya banyak bekerja di WordPress jadi gunakan PHP.

Metode saya adalah memuat HTML saya dalam Variabel PHP, dan kemudian menggemakan variabel di data-content.

$my-data-content = '<form><input type="text"/></form>';

bersama

data-content='<?php echo $my-data-content; ?>' 
bbruman
sumber