มีแบบฟอร์มภายใน bootstrap popover?


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

ฉันเดาว่าฉันจะเก็บเนื้อหาของฟอร์มไว้ในฟังก์ชั่นจาวาสคริปต์ ...

ฉันจะมีแบบฟอร์มภายใน bootstrap popover ได้อย่างไร

คำตอบ:


50

แทนที่เครื่องหมายคำพูดคู่รอบ ๆtype="text"ด้วยเครื่องหมายคำพูดเดี่ยว Like

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

หรือ

แทนที่การตัดคำพูดคู่data-contentด้วยเครื่องหมายคำพูดเดี่ยวถูกใจ

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

18
อย่าลืม "data-html = 'true'" ในแท็กปุ่ม
cwirz

275

ฉันจะใส่แบบฟอร์มลงในมาร์กอัปไม่ใช่ในแท็กข้อมูล นี่คือวิธีการทำงาน:

รหัส 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-ที่สามารถแก้ไขได้ ไลบรารีที่ให้คุณสร้างองค์ประกอบที่แก้ไขได้บนเพจของคุณตามป๊อปโอเวอร์

การสาธิต X-Editable

ส่วนประกอบของเว็บ

ไมค์คอสเตลโลได้ออก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>

การสาธิต


1
ทางออกที่ดีฉันแค่ใส่ชื่อdata-title="Some Title"ใน<a id="myID">แท็กเพื่อไม่ให้มี div พิเศษ ...
pebbo

1
คำตอบที่แท้จริงเท่านั้น
poitroae

1
@HaNdTriX +10 สำหรับวิธีที่คุณวางไว้
2sb

1
โปรดอ่าน: getbootstrap.com/javascript/#popoversคุณกำลังมองหาtriggerตัวเลือกนี้ ( trigger: 'focus')
HaNdTriX

1
ทำไมคุณไม่ใช้: angular-ui.github.io/bootstrap/#/popover ? ควรแก้ปัญหาของคุณ
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>

เพียงแค่ระบุ data-html = "true"


5

เช่นการสาธิตการทำงาน นี้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'
    })

ScreenShot

กำลังปรับปรุงภาพหน้าจอซอ


@DERIIIFranz ขอบคุณที่แก้ไขแล้ว: jsfiddle.net/kz5kjmbt CDN หายไปลิงก์เช็คเอาต์ที่อัปเดตและภาพหน้าจอ :)
Tats_innit

โซลูชันนี้ใช้ได้กับ Chrome ปัจจุบันและตอบคำถามได้ อย่างไรก็ตามการมีมาร์กอัปที่ซับซ้อนภายในแอตทริบิวต์ html อาจเกิดข้อผิดพลาดได้ง่ายและเพิ่มความเสี่ยงในการบำรุงรักษาและความสามารถในการเรียนรู้ของโค้ด
Ricardo

4

คุณสามารถโหลดแบบฟอร์มจากdivองค์ประกอบที่ซ่อนอยู่ด้วยhiddenคลาสที่ให้ 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,
});

1
แทนที่$(...).parent().html()ด้วย$(...).clone();)
Rhys Bradbury

3

หรือลองอันนี้

อันที่สองรวมถึงเนื้อหา div ที่ซ่อนอยู่ที่สองเพื่อให้แบบฟอร์มทำงานและทดสอบกับซอ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>

นี่เป็นทางออกที่ดี แต่ลิงก์ jsfiddle ของคุณดูเหมือนจะไม่สอดคล้องกับการใช้งานเดียวกัน คุณพบว่าตีเสียงดังปังนี้ฉันทำดำเนินการที่ถูกต้อง: plnkr.co/edit/IV2YbLCFSiYI0T1mXOLN?p=preview
bernardn

2

โซลูชันที่สมบูรณ์สำหรับทุกคนที่อาจต้องการฉันใช้สิ่งนี้แล้วได้ผลลัพธ์ที่ดี

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;
}

1

ฉันทำงานกับ WordPress บ่อยมากจึงใช้ PHP

วิธีการของฉันคือการใส่ HTML ของฉันในตัวแปร PHP จากนั้นจึงสะท้อนตัวแปรในdata-content.

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

พร้อมด้วย

data-content='<?php echo $my-data-content; ?>' 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.