Domanda

Sono novizio in quadro Yii e iniziare ad imparare sul piccolo progetto web in modo sono rimasto bloccato in questa posizione come risolverlo.

Ho un 'Order_form' in cui un utente ha confermare il suo ordine e se vogliono cambiare il 'Quantità' in modo che solo questo può cambiare, allora bydoing questo ho bisogno di cambiare il valore totale da calcolare sul fly sullo stesso modulo se Qtà fu cambiato dall'utente.

beginWidget ( 'CActiveForm', array (     'Id' => 'ordine-forma',     'EnableAjaxValidation' => false, )); ?>
<div class="row">
        <?php echo $form->labelEx($model,'price'); ?>
        <?php echo $model->price; ?>
</div>

<div class="row">
        <?php echo $form->labelEx($model,'qty'); ?>
        <?php echo $form->textField($model,'qty'); ?>
        <?php echo $form->error($model,'qty'); ?>
</div>

<div class="row">
        <?php echo $form->labelEx($model,'total'); ?>
        <?php echo $form->textField($model,'total'); ?>
</div>

endWidget (); ?>

$ (Document) .ready (function () {     var myVar = '999';     $ ( "# Model_total") val (myVar).; }); '

Qui ho aggiornato il mio script per chiarire che cosa ho bisogno, ecco sto cercando di passare un valore di '999' a 'Total' sulla stessa forma, ma questo non funziona. Potrebbe essere che mi manca / facendo qualcosa di sbagliato.

Vorrei anche altro modo per calcolare Qtà x del prezzo e ottenere il risultato dal controllore, se questo è possibile in caso affermativo si prega di guida tramite il codice.

È stato utile?

Soluzione

Una ragione il JS avete potrebbe non lavorare è: Sei sicuro che il ID "totale" campo è "model_total"? Di solito è qualcosa come "ORDER_TOTAL". Guardate il vostro codice HTML per verificare (Firebug aiuta).

In ogni caso, alcuni altri suggerimenti:

Un modo comune per risolvere questo problema di ordine totale è un pulsante "Aggiorna carrello", che i posti il ??modulo al controller in cui è calcolato sul totale dell'ordine, e poi la pagina visualizzata di nuovo con il nuovo totale.

Un altro modo per farlo sarebbe quello di istituire un onBlur vivo) (o delegato) ascoltatore (che fa una delle due cose (simile a quello che si sta cercando ora):

(1) POSTA il modulo per il controllo dove viene ricalcolato il totale. Qualcosa di simile (non testata):

$("#order-form #Order_qty").live('blur',function() {
  $.ajax({
    'type':'POST',
    'data':$('#order-form').serialize(),
    'success':function(data){$('#Order_total').val(data)}
  });}
);

Avrete bisogno di avere qualcosa nella vostra azione di controllo in questo modo:

if(isset($_POST['ajax']) && $_POST['ajax']==='order-form' && isset($_POST['Order'])) {
  // calculate new total based on the $_POST Model_qty field
  echo $new_total;
  Yii::app()->end();
}

(2) Si potrebbe fare il calcolo del tutto in JS, e aggiornarlo come si sta cercando di fare ora. Basta ricordare non è possibile aggiornare il qty di ordine nel database in questo modo, sine non stanno colpendo il controller.

$("#order-form #Order_qty").live('blur',function() {
  $('#Order_total').val($('#Order_price').val() * $('#Order_qty').val());
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top