부트 스트랩 모달에 데이터 전달


527

각각 ID가 첨부 된 몇 개의 하이퍼 링크가 있습니다. 이 링크를 클릭하면 모달 ( http://twitter.github.com/bootstrap/javascript.html#modals )을 열고이 ID를 모달에 전달하려고합니다. 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 () 함수에 값 인수를 전달하는 방법

(그리고 나는 이것을 시도했다 : 모달 대화 상자에서 입력 값을 설정하는 방법? )

답변:


533

jQuery의 .on 이벤트 핸들러를 사용 하여이 작업을 수행 할 수 있다고 생각 합니다.

다음은 테스트 할 수있는 바이올린입니다. 바이올린에서 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>

자바 스크립트

$(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가 있습니다.
레온 컬 렌스

1
@LeonCullens-바이올린과 코드를 업데이트했습니다. 지금 원하는대로 작동합니까?
mg1075

2
좋은 답변- modal('show')필수입니까? data-toggle="modal"링크에있는 것처럼 처리 할 것 같습니다 .
technophobia

7
$(this).data('id');자체로 귀중한 것이 었습니다! 나는 당신이 그걸로 데이터 속성을 얻을 수 있다는 것을 몰랐습니다. 나는 매일 부트 스트랩을 더 좋아합니다! = P
Manatax

23
@Manatax- $(this).data()jQuery의 일부입니다. api.jquery.com/data/#data-html5
mg1075

366

Bootstrap 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) .find ( 'input [name = "bookId"]'). val (bookId); 이것이 무엇을하는지 말해 줄 수 있습니까? 따라서 모달이 열려 있으면 입력 이름 bookId의 값이 올바르게 클릭 한 값입니까?
treblaluch

@treblaluch e.currentTarget는 clicked 요소이며 click 이벤트에서 가져옵니다 e. 이 줄은 input이름을 가진를 찾아 bookId그 값을 설정합니다.
aalaap

5
교체 $(this)와 함께하면 $(e.relatedTarget)좋은 작품
무하마드 Ibnuh

1
이것은 훌륭합니다. Bootstrap 4에서도 작동합니다.
jarrettyeo

36

다음은 @ mg1075의 코드에서 작동하는 방법입니다. 클래스를 모달 트리거 링크 / 버튼에 할당하지 않아도되도록 좀 더 일반적인 코드를 원했습니다.

트위터 부트 스트랩에서 테스트 3.0.3.

HTML

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

자바 스크립트

$(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

부트 스트랩 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>

쿼리

<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

부트 스트랩 4.3- 스 니펫 아래의 코드 사용-자세한 내용은 여기


1

다음은 id_data를 모달로 보내는 방법입니다.

<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 개를 추가하면 대화 상자의 양식을 보내면 혼란
스러울 것

0

simpleBootstrapDialog 시도해 볼 수 있습니다 . 여기 당신은 취소 및 제출 등 제목, 메시지, 콜백 옵션을 전달할 수 있습니다 ...


4
스택 오버플로에 오신 것을 환영합니다! 링크는 지식을 공유하는 좋은 방법이지만, 나중에 링크가 끊어지면 질문에 대답하지 않습니다. 질문에 답변하는 링크의 필수 내용을 답변에 추가하십시오. 내용이 너무 복잡하거나 여기에 맞지 않을 경우 제안 된 솔루션의 일반적인 개념을 설명하십시오. 항상 원래 솔루션의 웹 사이트에 대한 링크 참조를 유지해야합니다. 참조 : 좋은 답변을 작성하려면 어떻게합니까?
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.