2009-08-03 6 views
1

J'ai un formulaire qui nécessite des informations de facturation et d'expédition. Comme vous pouvez l'imaginer, j'ai des textboxes avec des informations répétitives pour 95% des cas. Toutefois, si quelqu'un veut être facturé à un endroit et que ses articles sont expédiés ailleurs, nous devons en tenir compte.Tout moyen facile jQuery de transférer du texte à partir de plusieurs boîtes de texte à plusieurs autres?

Ce que je voudrais faire pour améliorer l'expérience utilisateur est d'avoir un bouton qui transfère toutes les données des champs de facturation à leurs homologues d'expédition. Y at-il un moyen de le faire facilement dans jQuery? À l'heure actuelle, je l'ai fait sur le serveur avec le mappage 1 à 1 typique (par exemple, shippingfirstname.text = billingfirstname.text, etc), mais je me demandais si je pouvais enregistrer une publication avec un simple jQuery. Cependant, avec la façon dont .NET altère les ID, j'ai trouvé que c'est probablement plus de travail pour configurer tous les ID de client et ensuite faire le transfert. Est-ce que je manque quelque chose?

Merci

Répondre

5

Cela dépend des champs étant nommés exactement le même, sauf pour la facturation/expédition et que seuls les champs que vous souhaitez copier contient « facturation ».

function copyAddress() { 
    $('input[name*=billing]').each(function() { 
     var $this = $(this); 
     var shippingName = $this.attr('name').replace(/billing/,'shipping'); 
     $('input[name$=' + shippingName + ']').val($this.val()); 
    }); 
} 
+0

douces boules saintes. Je pourrais t'embrasser. c'est incroyable, merci! – Jason

+0

PS, je l'ai mis dans un événement click pour mon bouton, pour tous les futurs téléspectateurs qui pourraient vouloir mettre en œuvre la solution génial de tvanfosson – Jason

+0

tvanfosson juste des roches! Vous êtes génial mec! –

2

Je pense que la meilleure solution est de demander l'adresse de facturation, alors une simple case à cocher qui dit: « Ship to adresse de facturation » - cochée par défaut - quand quelqu'un désélectionne cette case, la « expédition "Les champs apparaissent. Le côté serveur doit toujours gérer la copie de ces informations à partir des champs de facturation-> expédition, tous les utilisateurs n'utilisent pas javascript.

En ce qui concerne un moyen jQuery pour copier d'un ensemble de champs à un autre, vous pouvez essayer quelque chose le long des lignes de:

// just so we are only working within the one form we want to work with: 
var $form = $('#ourform'); 

// all fields whos names begin with 'billing': 
$('input[name^=billing]', $form).each(function() { 
    var $field = $(this); 

    // replace the billing with shipping 
    var newName = $field.attr('name').replace(/^billing/, 'shipping'); 

    // look for an input named shipping instead of billing, 
    // and set its value to our value. 
    $('input[name='+newName+']', $form).val($field.val()); 
}); 

Si vous utilisez les caractères dans vos noms d'entrée [et] - vous aura besoin de leur échapper avec cette ligne de code:

newName = newName.replace(/\[/, '\\[').replace(/\]/, '\\]'); 
Questions connexes