2015-01-15 25 views
5

voglio convalidare un modulo in un modal bootstrap senza utilizzare alcun quadro. In realtà è una semplice scelta obbligatoria con un testo unico di ingresso e due pulsanti "Close" e "Invia". L'utente deve digitare il suo/il suo nome nella casella di input e fare clic su Invia. Il modulo è inviato con il metodo post.Convalida testo di input in modal bootstrap

Quello che voglio fare è che, se l'utente non inserisce nulla nella casella di input di e fa clic sul pulsante "Invia", la casella di input dovrebbe avere un bordo rosso che lo circonda invece del bordo blu predefinito . Ecco il codice per il mio modale:

<div id="myModal" class="modal fade" tabindex="-1"> 
    <div class="modal-dialog modal-lg"> 
     <div class="modal-content"> 
      <!--form--> 

      <form class = "form-horizontal" id="myForm" method="post" action="test.php" role="form"> 
       <div class="modal-header"> 
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
        <h4 class="modal-title">My modal</h4> 
       </div> 
       <div class="modal-body"> 
        <p> 
         Please enter your name: 
        </p> 
        <br/> 

        <div class="form-group"> 

         <div class="col-lg-12"> 
          <label class="control-label" for="firstname">Name</label> 
          <input type="text" class="form-control required" id="firstname" name="firstname"> 
         </div> 
        </div> 

       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
        <button id="myFormSubmit" class="btn btn-primary">Send</button> 
       </div> 
      </form> 
     </div> 
    </div> 
</div> 

Ho provato ad utilizzare javascript per cambiare la classe del testo di input per has-error ma non produce il contorno rosso. Quando clicco su Send It invia il valore vuoto attraverso il metodo POST invece di Ecco il mio codice JavaScript:

<script type="text/javascript"> 
     $('#myForm').validate({ 
      rules: { 
       name: { 
        minlength: 1, 
        required: true 
       }, 
      }, 
      highlight: function (element) { 
       $('#firstname').removeClass('has-success').addClass('has-error'); 
      }, 
      success: function (element) { 
       $('#firstname').removeClass('has-error').addClass('has-success'); 
      } 
     }); 
    </script> 

Mi sento come se stessi mescolare un sacco di cose qui. Sono ancora nuovo di bootstrap e javascript. Come posso ottenere il contorno rosso desiderato? Grazie.

Edit: Convalida funzione:

function validate() { 
    var x = document.forms["myForm"]["firstname"].value; 
    if (x == null || x == "") { 
     return false; 
    } 
} 

risposta

11

È necessario modificare le CSS classi dell'elemento inputgenitorediv.form-group, non il input:

Il HTML dopo che il pulsante di invio scatto dovrebbe essere simile a questo:

<div class="form-group has-error"> 
    <div class="col-lg-12"> 
     <label class="control-label" for="firstname">Name</label> 
     <input type="text" class="form-control required" id="firstname" name="firstname"> 
    </div> 
</div> 

Per raggiungere questo obiettivo, alterare il codice JavaScript a questo:

<script type="text/javascript"> 
    $('#myForm').on('submit', function(e) { 
    var firstName = $('#firstname'); 

    // Check if there is an entered value 
    if(!firstName.val()) { 
     // Add errors highlight 
     firstName.closest('.form-group').removeClass('has-success').addClass('has-error'); 

     // Stop submission of the form 
     e.preventDefault(); 
    } else { 
     // Remove the errors highlight 
     firstName.closest('.form-group').removeClass('has-error').addClass('has-success'); 
    } 
    }); 
</script> 
+0

Grazie per il vostro aiuto. Ho capito una cosa o due. Ho provato il tuo codice ma l'input è delineato in rosso dall'inizio. Penso di non essermi espresso bene. Voglio che l'input sia delineato in rosso solo dopo aver fatto clic sul pulsante di invio. Se l'input è vuoto e l'utente fa clic sul pulsante di invio, allora dovrebbe delineare l'input in rosso. – mkab

+0

Vedo, ho messo il codice 'HTML' solo per mostrarvi dove nel' DOM' dovrebbe essere la classe CSS 'has-error'. È necessario solo il JavaScript non l'HTML. Lo stato iniziale di non dovrebbe avere la classe 'has-error'. –

+0

Oh ok, capisco. Ancora il modulo viene inviato anche se il testo inserito è vuoto. Forse dovrei impedire l'azione predefinita del modulo, perché il modulo sta usando un metodo post. Come posso andare su questo? – mkab

1

div in cinghia di avvio ...

<div class="form-group"> 
    <div class="row"> 

     <label class="col-xs-2 col-sm-2 control-label">city:</label> 

     <div class="col-xs-3 col-sm-3 formGroups" 
      id="city_form1"> 
      <form:input name="city" class="form-control" 
       placeholder="City" data-toggle="tooltip" 
       data-placement="bottom" title="City" maxlength="15" /> 

      <small class="help-block col-sm-offset-0 col-sm-9" 
       style="display: none;">city must require</small> 
     </div> 
    </div> 
</div> 

come vedete c'è .help-block è display: none ora scrivere funzione javascript e controlla la convalida e se la convalida ora passa fai in modo di visualizzarla: blocco ... così puoi fare

divertiti con il cinturino di avvio :)

+0

Grazie per il vostro aiuto. Voglio delineare il testo di input non rosso visualizzare un messaggio che dice che è necessario un certo ingresso. Anche se sono d'accordo questo è un modo di convalidare forma – mkab

1

è molto facile

basta applicare classe .has errori per div funzione javascript

<div class="form-group has-error"> 
    <div class="row"> 

     <label class="col-xs-2 col-sm-2 control-label">city:</label> 

     <div class="col-xs-3 col-sm-3 formGroups" 
      id="city_form1"> 
      <form:input name="city" class="form-control" 
       placeholder="City" data-toggle="tooltip" 
       data-placement="bottom" title="City" maxlength="15" /> 

     </div> 
    </div> 
</div> 
0

Basta usare richiesto all'interno del campo di input come questo

<input type="text" class="form-control required" id="firstname" name="firstname" required/> 
+0

Questo è molto rischioso. Le convalide HTML5 possono essere aggirate molto facilmente. – Hanmaslah

+0

@Hanmaslah * qualsiasi * convalida lato client può essere aggirata facilmente, quindi si dovrebbe quasi sempre usare anche la validazione lato server – Cocowalla