2010-06-22 13 views
3

Je soumets certaines de mes formes avec javascript/jquery. Cela fonctionne très bien dans Firefox, mais dans Safari ou Chrome, aucune de mes valeurs de formulaire n'est affichée.chrome/safari (webkit?) Ne pas afficher de valeurs lors de la soumission via Javascript .submit()

Lorsque je vérifie la variable $ _POST, dans Firefox il est rempli correctement, mais sur safari/chrome les valeurs $ _POST sont vides.

Je soumets comme ça quand se cliqué (fonctionne très bien dans FF)

$("form#form_add_file_to_theme").submit(); 

ceci est ma forme (div entourant devient une boîte de dialogue UI .jQuery)

<div id="modal_create_themefile" style="display:none;">   
    <form action="" id="form_add_file_to_theme" name="form_add_file_to_theme" method="post">    
     <div class="field"> 
      <label for="var_template_name">File name</label> 
      <input type="text" class="text" id="var_template_name" name="var_template_name" /> 
     </div> 

     <div class="field"> 
      <label for="var_template_type">File type</label> 
      <select id="var_template_type" name="var_template_type"> 
       <option value="css">CSS</option> 
       <option value="include">Partial</option> 
       <option value="js">Javascript</option> 
      </select> 
     </div> 
    </form>     
</div> 

OK buttong de la boîte de dialogue l'impression $ _POST en php donne:

Array ([var_template_name] => [var_template_type] => css) 

ainsi la boîte de sélection est soumise, pas les champs de texte ...

MISE À JOUR: lorsque je passe la valeur = "test" options codées en dur dans mes champs de texte, ils sont soumis. Cependant, modifier les valeurs (ce qu'un utilisateur normal ferait) après le chargement de la page n'a aucun effet dans Webkit. Chrome & Safari prend simplement les valeurs "initiales" ou "par défaut" à soumettre.

+0

après certains dude Code – Starx

+0

S'il vous plaît poster le code de votre formulaire HTML. –

+0

mis à jour avec le code – Jorre

Répondre

2

Merci pour votre aide les gars. J'ai trouvé la solution à mon problème. La boîte de dialogue jQuery UI crée ou déplace le formulaire dans la boîte de dialogue, alors que webkit ne le sait pas. Webkit prend juste le code de forme original et le soumet.

je pouvais le réparer en faisant ceci:

dialog.data("dialog").uiDialog.find("form").submit(); 

cette façon, un navigateur est obligé de chercher la forme correcte dans la boîte de dialogue, non seulement dans la page.

2

Comme il y a un élément nommé "var_template_name" dans les données POST qui atteignent le serveur, cela signifie que la zone de texte est incluse dans la publication, mais la valeur est vide. Donc, d'une manière ou d'une autre, la valeur est effacée avant sa publication.

Avez-vous un compte Javascript qui vérifie le contenu du formulaire? Vérifiez que vous avez accidentellement fait une cession, quelque chose comme ceci:

if (document.getElementById('var_template_name').value = '') 

au lieu d'une comparaison:

if (document.getElementById('var_template_name').value == '') 
+0

non, cela causerait aussi que Firefox ne fonctionne pas, mais ce n'est pas le cas. Firefox fonctionne parfaitement avec ce code + toutes les vérifications sont correctes: if (templateDescription == "") – Jorre

+0

J'ai mis à jour ma question avec de nouvelles informations que j'ai découvertes – Jorre

+0

@Jorre: Je ne vois rien de mal dans le code que vous avez montré . Le formulaire est caché avec un style, comment le montrez-vous? Pouvez-vous afficher plus de code qui publie le formulaire? Quelles sont les causes de ce code, attrapez-vous un événement dans le formulaire? – Guffa

0

J'ai rencontré le même problème. J'ai une théorie que le formulaire de soumission se termine une fois que la page change, donc il devient incomplet. C'est juste une théorie que vous ne pouvez pas deviner, à moins que j'analyse les internes du webkit.

Ma solution - utilise ajax au lieu de soumettre un formulaire.

$ .post ("/ submit_url", $ ("# form_id").sérialiser());

Je ne suis pas absolument sûr que la stratégie fonctionne toujours, mais elle pourrait le faire.

0

J'ai également rencontré un problème similaire. J'ai lutté quelques heures et j'ai trouvé comment le faire fonctionner correctement. Voici mon html de dialogue après le correctif. J'ai eu l'étiquette de forme d'ouverture en dehors de la div "interest-edit-dialog" au début. La boîte de dialogue n'affiche pas les variables d'entrée alors. J'ai été inspiré par Jorre et j'ai vérifié la source avec l'outil Chrome lorsque la boîte de dialogue est en place, et j'ai trouvé que la balise d'ouverture avait disparu. J'ai donc déplacé la balise de forme d'ouverture à l'intérieur de div "interest-edit-dialog". C'est essentiellement ça. Les variables d'entrée ont été affichées correctement. Cela signifie que vous ne pouvez pas mettre votre étiquette de formulaire en dehors de la boîte de dialogue html que vous enregistrez avec jquery.ui.

<div style="display: none; z-index: 1000; outline-width: 0px; outline-style: initial; outline-color: initial; position: absolute; " class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-dialog-form"> 
    <div id="interest-edit-dialog" title="whatever" class="ui-dialog-content ui-widget-content"> 
    <form id="interestDialogForm" name="interestDialogForm" action="einterest" method="post" enctype="multipart/form-data"> 
    <p class="validateTips"></p> 
    <fieldset> 
    <?php echo $interest_list; ?> 
    <p><input type="text" id="myinterest1" class="myinterest1" name="myinterest1" value="FOO" /></p> 
    <p><input type="text" id="myinterest2" class="myinterest2" name="myinterest2" value="BAR" /></p> 
    <p><input type="text" id="myinterest3" class="myinterest3" name="myinterest3" value="" /></p> 
    <p><input type="text" id="myinterest4" class="myinterest4" name="myinterest4" value="" /></p> 
    <p><input type="text" id="myinterest5" class="myinterest5" name="myinterest5" value="" /></p> 
    <input type="hidden" name="serial" id="serial" value="" /> 
    </fieldset> 
    </form> 
    </div> 
    <div class="ui-dialog-buttonpane ui-helper-clearfix"> 
    </div> 
</div> 

Le code javascript pour soumettre ci-dessus formulaire est

$("#interestDialogForm").submit();