Verilerin bir önyükleme yöntemine aktarılması


527

Her birinde bir kimlik bulunan birkaç köprü var. Bu bağlantıyı tıkladığımda, bir yöntem ( http://twitter.github.com/bootstrap/javascript.html#modals ) açmak ve bu kimliği modda geçirmek istiyorum. Google'da arama yaptım, ancak bana yardımcı olabilecek hiçbir şey bulamadım.

Bu kod:

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

Hangisi açmalı:

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

Bu kod parçası ile:

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

Ancak, köprüyü tıklattığımda hiçbir şey olmuyor. Köprüyü verdiğimde, <a href="#addBookDialog" ...>mod gayet iyi açılıyor ancak veri içermiyor.

Bu örneği takip ettim: Bootstrap'ta modal.show () işlevine değer bağımsız değişkenleri nasıl iletilir

(ve bunu da denedim: Kalıcı bir diyalogda giriş değeri nasıl ayarlanır? )

Yanıtlar:


533

Bu işi jQuery'nin .on olay işleyicisini kullanarak yapabileceğinizi düşünüyorum .

İşte test edebileceğiniz bir keman; kipte görüntüleyebilmeniz için kemandaki HTML çerçevesini mümkün olduğunca genişlettiğinizden emin olun.

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
Bu yalnızca bir köprüm olduğunda işe yarıyor, ancak her birinin kendi kimliğine sahip birden çok köprüm var. Başka bir kimliğe sahip ikinci bir köprü ekledim, ancak mod her zaman ilk köprünün kimliğine sahip.
Leon Cullens

1
@LeonCullens - Kemanı ve kodu güncelledim. Şimdi istediğiniz gibi çalışıyor mu?
mg1075

2
İyi cevap - ama modal('show')gerekli mi? data-toggle="modal"Bağlantılarda bununla ilgilenecek gibi görünüyor .
teknophobia

7
sadece $(this).data('id');kendi paha biçilmez oldu! Bununla ilgili veri okuyucularını alabileceğiniz hakkında hiçbir fikrim yoktu. Her gün daha fazla bootstraps seviyorum! = P
Manatax

23
@Manatax - jQuery'nin $(this).data()bir parçasıdır. api.jquery.com/data/#data-html5
mg1075

366

Bootstrap 3.2.0 kullanıyorsanız bunu yapmanın daha temiz bir yolu .

HTML'yi bağla

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

Kalıcı 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 ( 'girişi [ad = "BookID"]') val (BookID.); bana bunun ne yaptığını söyleyebilir misin? Eğer mod açıksa yani bookId girdi adının değeri sağ tıklandığı değerdir?
treblaluch

@treblaluch e.currentTarget, tıklama etkinliğinden alınan tıklanan öğedir e. Bu satır input, adında bir an bulur bookIdve üzerindeki değeri ayarlar.
aalaap

5
yerine $(this)birlikte $(e.relatedTarget)harika işler
Muhammed Ibnuh

1
Bu harika, Bootstrap 4 için de çalışıyor
jarrettyeo

36

İşte @ mg1075 kodundan çalışarak bunu nasıl uyguladım. Modal tetikleyici bağlantılarına / düğmelerine sınıf atamak zorunda kalmamak için biraz daha genel bir kod istedim:

Twitter Bootstrap 3.0.3'te test edilmiştir.

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') yerine kullanabilirsiniztypeof $(this).data('id') !== 'undefined'
Haseeb Zulfiqar

13

Bootstrap 3+ kullanıyorsanız, Jquery kullanıyorsanız bu biraz daha kısaltılabilir.

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

Kodunuz doğru modsal html yapısıyla çalışır.

$(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 - snippet'in altındaki kodu kullanın - daha fazla bilgi


1

İd_data'yı bir mod yöntemine şu şekilde gönderebilirsiniz:

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

Ve javascript:

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

1

Bununla dene

$(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') 
  })
})

Ancak, İletişim Kutusunu kapatır ve başka bir Öğe için açarsanız ... 2 Gizli alan eklersiniz ve iletişim kutusunun biçimini gönderdiğinizde karışıklık olur
Pitzas

0

SimpleBootstrapDialog'u deneyebilirsiniz . Buradan iptal ve gönderme vb.İçin başlık, mesaj, geri arama seçeneklerini iletebilirsiniz ...


4
Stack Overflow'a hoş geldiniz! Bağlantılar bilgiyi paylaşmanın harika bir yolu olsa da, gelecekte kırılırlarsa soruya gerçekten cevap vermezler. Cevabınızı soruyu cevaplayan bağlantının temel içeriğini ekleyin. İçeriğin buraya sığmayacak kadar karmaşık veya çok büyük olması durumunda, önerilen çözümün genel fikrini açıklayın. Her zaman orijinal çözümün web sitesine bir bağlantı referansı tutmayı unutmayın. Bakınız: İyi bir cevabı nasıl yazarım?
sɐunıɔ ןɐ qɐp

0

Bu jquery ile çok kolay:

Aşağıda bağlantı bağlantınız varsa:

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

Kipinizin şov olayında çapa etiketine aşağıdaki gibi erişebilirsiniz

//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')
    // ...
    // ...
})

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.