Pregunta

Soy novato en el marco Yu y empezar a aprender sobre el proyecto web pequeño, así que me quedé atrapado en esta posición como la forma de resolverlo.

Tengo un 'Order_form' donde un usuario tiene confirmar su pedido y si desea cambiar el 'Cant' por lo que sólo esto puede cambiar a continuación bydoing esto necesito para cambiar el valor total que se calcule sobre la mosca en la misma forma si Cantidad nos cambiamos por el usuario.

beginWidget ( 'CActiveForm', array ( 'Id' => 'orden-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 (miVar).; }); '

Aquí he actualizado mi script para aclarar lo que necesito, así que aquí estoy tratando de pasar un valor de '999' a 'Total' en la misma forma, pero esto no funciona. Podría ser que me falta / haciendo algo mal.

También me gustaría que otra manera de calcular Cantidad x Precio y obtener el resultado desde el controlador si esto es posible si es así por favor guía a través de código.

¿Fue útil?

Solución

Una de las razones de la JS tiene no funcione es: ¿Está seguro el ID de "total" de campo es "model_total"? Por lo general es algo así como "order_total". Vistazo a su fuente HTML para comprobar (Firebug ayuda).

De todos modos, algunas otras sugerencias:

Una forma común de resolver este problema de orden total es un botón de "Actualizar Cesta", que publica la espalda forma al controlador donde se calcula el total del pedido, y luego la página representada de nuevo con el nuevo total.

Otra manera de hacer esto sería la de establecer un onBlur vivo) escucha ((o su delegado) que hace una de dos cosas (similar a lo que está tratando ahora):

(1) Deja la forma al controlador donde se vuelve a calcular el total. Algo como esto (no probado):

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

Usted necesita tener algo en su acción del controlador de esta manera:

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) Se podría hacer el cálculo totalmente en JS, y actualizarlo como si estuviera tratando de hacer ahora. Sólo recuerde que no puede actualizar la cantidad de pedidos en la base de datos de esta manera, seno que no está golpeando el controlador.

$("#order-form #Order_qty").live('blur',function() {
  $('#Order_total').val($('#Order_price').val() * $('#Order_qty').val());
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top