Question

Je suis débutant dans le cadre et Yû commencer à apprendre sur le petit projet web, donc je suis resté bloqué sur cette position que la façon de le résoudre.

J'ai « Order_form » où un utilisateur confirmer sa commande et si vous voulez changer le « Quantité » alors que cela peut changer bydoing alors ce que je dois changer la valeur totale pour être calculer à la volée sur la même formulaire si Qté ont été changés par l'utilisateur.

beginWidget ( 'CActiveForm', array (     'Id' => 'en forme de' commander,     '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). });

Ici, je mis à jour mon script pour clarifier ce que je dois, alors voici que je suis en train de passer une valeur sur le même formulaire « 999 » à « Total », mais cela ne fonctionne pas. Il est peut-être que je manque / faire quelque chose de mal.

Je voudrais aussi comme autre façon de calculer x Qté Prix et obtenir le résultat du contrôleur si cela est possible si oui s'il vous plaît guide à travers le code.

Était-ce utile?

La solution

L'une des raisons de la JS vous avez peut-être pas travailler est: êtes-vous que l'ID de champ « total » est « model_total »? Habituellement, il est quelque chose comme « ORDER_TOTAL ». Regardez votre source HTML pour vérifier (Firebug aide).

Quoi qu'il en soit, d'autres suggestions:

Une façon courante pour résoudre ce problème total de la commande est un bouton « Mise à jour panier », qui envoie l'arrière de forme au contrôleur où l'on calcule le total de la commande, puis la page rendue à nouveau avec le nouveau total.

Une autre façon de le faire serait de mettre en place un onBlur en direct () (ou son délégué) auditeur qui fait l'une des deux choses (semblable à ce que vous essayez maintenant):

(1) Partage la forme au dispositif de commande lorsque le total est recalculé. Quelque chose comme ça (non testé):

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

Vous aurez besoin d'avoir quelque chose dans votre action de contrôleur comme ceci:

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) Vous pouvez faire le calcul totalement JS, et mettre à jour comme vous essayez de le faire maintenant. Rappelez-vous simplement que vous ne pouvez pas mettre à jour l'ordre qty dans la base de données de cette façon, sinus vous ne frappez pas le contrôleur.

$("#order-form #Order_qty").live('blur',function() {
  $('#Order_total').val($('#Order_price').val() * $('#Order_qty').val());
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top