2010-09-22 5 views
4

Ce que nous essayons de faire ici, c'est que nous avons un formulaire avec un identifiant de upgrade_form. Nous avons également un formulaire appelé "paypal_submit". Ce formulaire est vide. 'upgrade_form' a des champs de détails de facturation (adresse, nom, expiration etc.)La forme de jquery ne fonctionne pas dans IE

Nous avons alors un seul bouton de soumission, et la logique était qu'elle soumettrait le formulaire si un bouton radio de carte de crédit est coché, mais il affichera une lightbox nyromodal (http://nyromodal.nyrodev.com) lorsque vous choisissez le bouton radio paypal et cliquez sur soumettre.

  • EDIT *

D'accord, nous avons complètement réorganisé l'ensemble du processus. Nous avons d'abord ajouté 2 champs cachés qui ne sont pas inclus dans le formulaire. Ces 2 champs contiennent des URL pour les cartes de crédit et paypal. Lorsque vous sélectionnez le bouton radio de la carte de crédit, vous obtenez l'url de la carte de crédit. Lorsque vous sélectionnez le bouton radio paypal, vous obtenez l'url paypal.

Lorsque vous cliquez sur le bouton radio, nous changeons l'action de la forme avec ceci:

$('#upgrade_form').attr('action', $('#credit-card-target-url').val()) 

(-url carte de crédit est le champ caché)

Alors, quand on clique sur le lien dans la lightbox nyromodal, nous appelons simplement

$('#upgrade_form').submit(); 

BUT! IL NE FONCTIONNE TOUJOURS EN AUCUNE IE. Toute aide à ce sujet? Nous sommes en train d'installer le débogueur de script IE suggéré, mais je suis pessimiste, nous ne verrons rien.

EDIT

Juste rejugé celui-ci. Nous avons sorti la lightbox, et l'autre code. Nous avons commencé avec une forme de base avec un lien qui lorsqu'il est pressé, appelle:

$('#upgrade_form').submit(); 

ne fonctionne toujours pas dans IE. Alors est-ce à cause du submit() de jquery?

D'accord, je googlé pour jquery submit ne fonctionne pas dans IE et trouvé ceci: jQuery form submit() is not working in IE6?

Mais j'ai vérifié notre code et notre bouton « Soumettre » est en fait un lien, et j'ai cherché docment généré et n'a trouvé aucune entrées nommées soumettre. Lorsque le lien est cliqué, j'ai ajouté une alerte pour vérifier si le formulaire existe (à cause du problème nodeName null) et j'obtiens l'alerte avec le formulaire html. Il s'arrête juste à soumettre.

ici est le code en ce moment:

$('#paypalbutton').click(function() { 
    alert($('form#upgrade_form').html()); 
    $('form#upgrade_form').submit(); 
    return true; 
} 

IE sur cette ligne stoppe en jquery:

nodeName: function(elem, name) { 
    return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); 
}, 
+0

Quelle version de jQuery? IE interdit de changer le 'type' d'une entrée, c'est peut-être votre problème. –

+0

Que faire si vous avez inséré une ligne 'alert (parameters.length);' juste avant votre instruction $ .each? Que révèle-t-il? – mkoistinen

+0

le plus récent. J'ai refactorisé ceci pour ajouter de cette façon: $ ('# payment_form'). Append (''); mais il échoue toujours – corroded

Répondre

0

Est-ce une déclaration try...catch à l'intérieur du each() révéler l'erreur?

0

Si vous ne l'avez pas déjà fait, vous pouvez essayer de le parcourir en utilisant le débogueur JavaScript intégré à IE (intégré depuis IE8, ou téléchargeable avant IE8)?

Beaucoup de gens utilisent Firebug - parce qu'il est génial :) mais beaucoup de gens ne réalisent pas le talent caché de construit dans le débogueur dans IE 8.

Il a les mêmes caractéristiques Regards croisés que tout autre débogueur de script, mais here is a guide for the specific features si vous ne l'avez pas rencontré avant:

+0

Je dois le vérifier et les erreurs sur la ligne jquery.js 29 "return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase() "(la version minifiée) – corroded

+0

Hmmm une erreur au fond de jQuery je devine ... un problème! –

1

Changer la façon dont vous avez formaté la méthode .each() semble faire l'affaire ...

$('form#paypal-form').submit(function(e) { 
    e.preventDefault(); 
    var parameters = $('form#upgrade_form').serializeArray(); 
    $(parameters).each(function(i,param){ 
    $('<input />').attr('type', 'hidden') 
    .attr('name', param.name) 
    .attr('value', param.value) 
    .appendTo('form#paypal-form'); 
    });  
}); 
14

J'ai récemment eu un problème similaire, où JE était en train de créer une "pseudo-forme" dans un formulaire serveur ASP.NET (donc je ne pouvais pas utiliser une autre balise de formulaire), que je voulais publier sur un autre domaine sans avoir besoin d'écrire du code serveur pour faire le post distant. Réponse facile - créez un formulaire à la volée et soumettez-le. Fonctionne dans de bons navigateurs ...

Après quelques essais et tribulations, j'ai réalisé que IE ne fonctionnera pas comme prévu (quelle surprise) à moins que le formulaire qui est soumis a été ajouté à DOM. Donc, c'était ma solution. J'espère que ça aide certains d'entre vous. Sachez que toutes mes entrées et mes soumissions étaient dans le même conteneur. ".post-to" est une entrée cachée avec l'URL.

$(".post-form").click(function(ev) { 

    var postto = $(this).siblings(".post-to").val();  
    var form = document.createElement("form") 
    $(form).attr("id", "reg-form").attr("name", "reg-form").attr("action", postto).attr("method", "post").attr("enctype", "multipart/form-data"); 

    $(this).siblings("input:text").each(function() { 
     $(form).append($(this).clone()); 
    }); 

    document.body.appendChild(form); 
    form.submit(); 
    document.body.removeChild(form); 

    return false; 
}); 

Finalement, cela fonctionne un régal.

+0

cela a fonctionné pour moi! merci – ariel

+0

oui! c'est exactement le problème que j'avais, merci ! * serre le poing à IE * – Youdaman