การส่งผ่านข้อมูลไปยัง modst bootstrap


527

ฉันมีไฮเปอร์ลิงก์สองอันที่แต่ละอันมี ID แนบอยู่ เมื่อฉันคลิกที่ลิงค์นี้ฉันต้องการเปิด modal ( http://twitter.github.com/bootstrap/javascript.html#modals ) และส่งรหัสนี้ไปยัง modal ฉันค้นหาใน google แต่ฉันไม่พบสิ่งใดที่สามารถช่วยฉันได้

นี่คือรหัส:

<a data-toggle="modal" data-id="@book.Id" title="Add this item" class="open-AddBookDialog"></a>

ซึ่งควรเปิด:

<div class="modal hide" id="addBookDialog">
    <div class="modal-body">
        <input type="hidden" name="bookId" id="bookId" value=""/>
    </div>
</div>

ด้วยรหัสชิ้นนี้:

$(document).ready(function () {
    $(".open-AddBookDialog").click(function () {
        $('#bookId').val($(this).data('id'));
        $('#addBookDialog').modal('show');
    });
});

อย่างไรก็ตามเมื่อฉันคลิกไฮเปอร์ลิงก์ไม่มีอะไรเกิดขึ้น เมื่อฉันให้ไฮเปอร์ลิงก์<a href="#addBookDialog" ...>โมดอลจะเปิดได้ดี แต่ไม่มีข้อมูลใด ๆ

ฉันทำตามตัวอย่างนี้: วิธีการส่งผ่านค่าอาร์กิวเมนต์ไปยังฟังก์ชั่น modal.show () ใน Bootstrap

(และฉันก็ลองทำสิ่งนี้: จะตั้งค่าอินพุตอย่างไรในกล่องโต้ตอบโมดอล? )

คำตอบ:


533

ฉันคิดว่าคุณสามารถใช้งานได้โดยใช้ตัวจัดการเหตุการณ์. jQuery

นี่คือปริศนาที่คุณทดสอบได้ เพียงตรวจสอบให้แน่ใจว่าขยายเฟรม HTML ในซอให้มากที่สุดเท่าที่จะทำได้เพื่อให้คุณสามารถดูคำกริยา

http://jsfiddle.net/Au9tc/605/

HTML

<p>Link 1</p>
<a data-toggle="modal" data-id="ISBN564541" title="Add this item" class="open-AddBookDialog btn btn-primary" href="#addBookDialog">test</a>

<p>&nbsp;</p>


<p>Link 2</p>
<a data-toggle="modal" data-id="ISBN-001122" title="Add this item" class="open-AddBookDialog btn btn-primary" href="#addBookDialog">test</a>

<div class="modal hide" id="addBookDialog">
 <div class="modal-header">
    <button class="close" data-dismiss="modal">×</button>
    <h3>Modal header</h3>
  </div>
    <div class="modal-body">
        <p>some content</p>
        <input type="text" name="bookId" id="bookId" value=""/>
    </div>
</div>

JAVASCRIPT

$(document).on("click", ".open-AddBookDialog", function () {
     var myBookId = $(this).data('id');
     $(".modal-body #bookId").val( myBookId );
     // As pointed out in comments, 
     // it is unnecessary to have to manually call the modal.
     // $('#addBookDialog').modal('show');
});

2
สิ่งนี้ใช้ได้ดีเมื่อฉันมีไฮเปอร์ลิงก์เดียว แต่ฉันมีไฮเปอร์ลิงก์หลายอันแต่ละอันมี ID ของตนเอง ฉันเพิ่มไฮเปอร์ลิงก์ที่สองด้วย ID อื่น แต่โมดอลจะมี ID ของไฮเปอร์ลิงก์แรกเสมอ
Leon Cullens

1
@LeonCullens - ฉันได้อัพเดทซอและรหัสแล้ว มันทำงานได้ตามที่คุณต้องการตอนนี้หรือไม่?
mg1075

2
คำตอบที่ดี - แต่modal('show')จำเป็นหรือไม่ ดูเหมือนว่าdata-toggle="modal"ในลิงค์จะดูแลที่
technophobia

7
เพียงแค่$(this).data('id');มีค่ามันเป็นของตัวเอง! ฉันไม่รู้ว่าคุณสามารถรับข้อมูลได้ ฉันชอบ bootstraps มากขึ้นทุกวัน! = P
Manatax

23
@Manatax - $(this).data()เป็นส่วนหนึ่งของ jQuery api.jquery.com/data/#data-html5
mg1075

366

นี่คือวิธีการทำความสะอาดที่จะทำมันถ้าคุณกำลังใช้เงินทุน 3.2.0

ลิงก์ HTML

<a href="#my_modal" data-toggle="modal" data-book-id="my_id_value">Open Modal</a>

JavaScript เป็นกิริยาช่วย

//triggered when modal is about to be shown
$('#my_modal').on('show.bs.modal', function(e) {

    //get data-id attribute of the clicked element
    var bookId = $(e.relatedTarget).data('book-id');

    //populate the textbox
    $(e.currentTarget).find('input[name="bookId"]').val(bookId);
});

http://jsfiddle.net/k7FC2/


1
$ (e.currentTarget) ประจำวันหา ( 'อินพุต [ชื่อ = "bookId"]') Val (bookId). คุณบอกฉันได้ไหมว่าทำอะไรได้บ้าง ดังนั้นถ้าโมดอลเปิดหมายความว่าค่าของชื่ออินพุต bookId คือค่าที่มันถูกคลิกใช่ไหม?
treblaluch

@treblaluch เป็นองค์ประกอบคลิกซึ่งจะนำมาจากเหตุการณ์คลิกe.currentTarget eบรรทัดนี้ค้นหาinputด้วยชื่อbookIdและตั้งค่าไว้
aalaap

5
แทนที่$(this)ด้วย$(e.relatedTarget)ผลงานที่ดี
Muhammad Ibnuh

1
นี่ยอดเยี่ยมใช้งานได้กับ Bootstrap 4 เช่นกัน
jarrettyeo

36

นี่คือวิธีที่ฉันใช้มันทำงานจากรหัสของ @ mg1075 ฉันต้องการรหัสทั่วไปเพิ่มขึ้นอีกเล็กน้อยเพื่อที่จะได้ไม่ต้องกำหนดคลาสให้กับลิงค์ / ปุ่มทริกเกอร์:

ทดสอบใน Twitter Bootstrap 3.0.3

HTML

<a href="#" data-target="#my_modal" data-toggle="modal" data-id="my_id_value">Open Modal</a>

JAVASCRIPT

$(document).ready(function() {

  $('a[data-toggle=modal], button[data-toggle=modal]').click(function () {

    var data_id = '';

    if (typeof $(this).data('id') !== 'undefined') {

      data_id = $(this).data('id');
    }

    $('#my_element_id').val(data_id);
  })
});

2
คุณสามารถใช้!! $(this).data('id') แทนtypeof $(this).data('id') !== 'undefined'
Haseeb Zulfiqar

13

หากคุณอยู่บน bootstrap 3+ สิ่งนี้อาจสั้นลงอีกเล็กน้อยหากใช้ Jquery

HTML

<a href="#" data-target="#my_modal" data-toggle="modal" class="identifyingClass" data-id="my_id_value">Open Modal</a>

<div class="modal fade" id="my_modal" tabindex="-1" role="dialog" aria-labelledby="my_modalLabel">
<div class="modal-dialog" role="dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title" id="myModalLabel">Modal Title</h4>
        </div>
        <div class="modal-body">
            Modal Body
            <input type="hidden" name="hiddenValue" id="hiddenValue" value="" />
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">No</button>
            <button type="button" class="btn btn-primary">Yes</button>
        </div>
    </div>
</div>

jQuery

<script type="text/javascript">
    $(function () {
        $(".identifyingClass").click(function () {
            var my_id_value = $(this).data('id');
            $(".modal-body #hiddenValue").val(my_id_value);
        })
    });
</script>

10

รหัสของคุณจะทำงานร่วมกับโครงสร้าง html ที่ถูกต้อง

$(function(){
  $(".open-AddBookDialog").click(function(){
     $('#bookId').val($(this).data('id'));
    $("#addBookDialog").modal("show");
  });
});
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>


<a data-id="@book.Id" title="Add this item" class="open-AddBookDialog">Open Modal</a>

<div id="addBookDialog" class="modal fade" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-body">
       <input type="hidden" name="bookId" id="bookId" value=""/>
      </div>
    
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</html>


9

Bootstrap 4.3 - ใช้รหัสจากตัวอย่างด้านล่าง - เพิ่มเติมที่นี่


1

นี่คือวิธีที่คุณสามารถส่ง id_data ไปยัง modal:

<input
    href="#"
    data-some-id="uid0123456789"
    data-toggle="modal"
    data-target="#my_modal"
    value="SHOW MODAL"
    type="submit"
    class="btn modal-btn"/>

<div class="col-md-5">
  <div class="modal fade" id="my_modal">
   <div class="modal-body modal-content">
     <h2 name="hiddenValue" id="hiddenValue" />
   </div>
   <div class="modal-footer" />
</div>

และจาวาสคริปต์:

    $(function () {
     $(".modal-btn").click(function (){
       var data_var = $(this).data('some-id');
       $(".modal-body h2").text(data_var);
     })
    });

1

ลองกับสิ่งนี้

$(function(){
 //when click a button
  $("#miButton").click(function(){
    $(".dynamic-field").remove();
    //pass the data in the modal body adding html elements
    $('#myModal .modal-body').html('<input type="hidden" name="name" value="your value" class="dynamic-field">') ;
    //open the modal
    $('#myModal').modal('show') 
  })
})

แต่ถ้าคุณปิดกล่องโต้ตอบและเปิดมันสำหรับองค์ประกอบอื่น ... คุณจะเพิ่ม 2 เขตข้อมูลที่ซ่อนอยู่และมันจะเป็นระเบียบเมื่อคุณส่งรูปแบบของการสนทนา
Pitzas

0

คุณสามารถลอง simpleBootstrapDialog ที่นี่คุณสามารถส่งชื่อข้อความตัวเลือกการโทรกลับเพื่อยกเลิกและส่ง ฯลฯ ...


4
ยินดีต้อนรับสู่ Stack Overflow! แม้ว่าลิงก์จะเป็นวิธีที่ยอดเยี่ยมในการแบ่งปันความรู้ แต่พวกเขาจะไม่ตอบคำถามหากพวกเขาเสียในอนาคต เพิ่มคำตอบของคุณในเนื้อหาสำคัญของลิงค์ที่ตอบคำถาม ในกรณีที่เนื้อหามีความซับซ้อนหรือใหญ่เกินกว่าจะอธิบายได้ให้อธิบายแนวคิดทั่วไปของการแก้ปัญหาที่เสนอ โปรดจำไว้ว่าให้อ้างอิงลิงก์ไปยังเว็บไซต์ของโซลูชันเดิมเสมอ ดู: ฉันจะเขียนคำตอบที่ดีได้อย่างไร
sɐunıɔןɐqɐp

0

นี่เป็นเรื่องง่ายด้วย jquery:

ถ้าด้านล่างเป็นลิงค์สมอของคุณ:

<a data-toggle="modal" data-id="@book.Id" title="Add this item" class="open-AddBookDialog"></a>

ในเหตุการณ์แสดงโมดัลของคุณคุณสามารถเข้าถึงแท็กจุดยึดเช่นด้านล่าง

//triggered when modal is shown
$('#modal_id').on('shown.bs.modal', function(event) {

    // The reference tag is your anchor tag here
    var reference_tag = $(event.relatedTarget); 
    var id = reference_tag.data('id')
    // ...
    // ...
})

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