2015-02-28 36 views
10

Ho già controllato gli altri thread, coprendo questo problema, ma nessuna di queste soluzioni funziona per me.Select2 Select in Bootstrap Modal

sto usando jQuery 1.11.2, select2-4.0.0-beta.3 e bootstrap-3.3.1

mio modale si presenta come segue:

<div class="modal fade" id="addProductModal"> 
    <div class="modal-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">Add Product</h4> 
      </div> 
      <div class="modal-body"> 

      {!! BootForm::openHorizontal(2,10)->action('/recipes/'.$recipe->id.'/product')->post() !!} 

       {!! BootForm::select('Produkte: ','product_list[]' , $products)->id('products') !!} 
       {!! BootForm::submit('Erstellen') !!} 

       {!! BootForm::token() !!} 
      {!! BootForm::close() !!} 

      </div> 
      <div class="modal-footer"> 
       <button type="button" class="btn btn-default" data-dismiss="modal">Schließen</button> 
      </div> 
     </div><!-- /.modal-content --> 
    </div><!-- /.modal-dialog --> 
</div><!-- /.modal --> 

E voglio chiamare $('#products').select2(); Il plugin funziona bene in altri posti. Ma è avvitato in un modal:

http://imgur.com/rzcTVTD

Aggiornamento: (Non) violino Lavorare qui http://jsfiddle.net/Strernd/o0d3vtek/

risposta

21

Il problema riscontrato è che, quando Select2 è binded alla selezione, l'arco generato è qualcosa di simile:

<span class="select2 select2-container select2-container--default" dir="ltr" style="width: 100px;"> 
    <span class="selection"> 
     <span class="select2-selection select2-selection--single" tabindex="0" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" aria-owns="select2-products-results" aria-labelledby="select2-products-container"> 
      <span class="select2-selection__rendered" id="select2-products-container">Mein Produkt</span> 
      <span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span> 
     </span> 
    </span> 
    <span class="dropdown-wrapper" aria-hidden="true"></span> 
</span> 

noterete la hardcoded width: 100px che costringe il testo da "a spacco". Potresti pensare "perché diavolo ?!" e la risposta è sicuramente la seguente: stai usando una versione beta.

È possibile risolvere questo problema:

  1. Forzare width: 100% con il seguente codice CSS:

    .select2-container { 
        width: 100% !important; 
        padding: 0; 
    } 
    

    Date un'occhiata a this working jsfiddle (ho aggiunto alcune col-xs classi per l'etichetta e un altro div). Fai attenzione che questa soluzione funziona finché hai una larghezza sufficiente per il tuo testo. Se la larghezza è più piccola del testo che avrete lo stesso problema e avrete bisogno di modificare il CSS per aggiungere overflow: auto; e text-overflow: ellipsis;

  2. utilizzare l'ultima versione stabile 3.5.2, che funziona correttamente come this jsfiddle shows.

+0

Solutions 2 sembra buona. È stato stupido usare la versione beta. Ma ora ho questo problema http://i.imgur.com/wAHIpKD.png – Strernd

+0

Dato che stai usando Bootstrap avrai bisogno di due file CSS. Il comune 'select2.css' e aditional' select2-bootstrap.min.css' (vedi le risorse del violino). Per un effetto più simile a "Bootstrap", dai un'occhiata a questa pagina: https://fk.github.io/select2-bootstrap-css/ –

+1

Grazie mille! Hai risparmiato il mio tempo :) – Strernd

4

Quello che ho fatto è stato quello di aggiungere questo codice appena sopra la pagina

span.select2-container { 
    z-index:10050; 
} 
+3

Si prega di spiegare perché questo funziona, non solo 'dump code' –

+1

z-index è una spiegazione sufficiente – ErTR

4
span.select2-container { 
    z-index:10050; 
} 

non funziona quando si hanno select2 al di fuori della modale.

EDIT

ho trovato questa sarebbe una soluzione migliore quando si utilizza select2 in Bootstrap modale e fuori di esse.

.select2-container--open{ 
     z-index:9999999   
    } 
+0

mi ha salvato la vita. quindi +1. Grazie – Kimutai

0

È possibile utilizzare questo link quando si desidera utilizzare select2 in modal:

$('#my-select').select2({ 
    dropdownParent: $('#my-modal') 
});