2010-05-18 4 views
11

J'ai un formulaire où l'utilisateur peut entrer un lien, cliquez sur le bouton "Ajouter un lien", et ce lien est ensuite (via jQuery) ajouté au formulaire comme un champ caché. Le problème est que ce n'est pas POSTing lorsque je soumets le formulaire. Ça commence vraiment à me confondre. La chose est que si je code un champ caché dans le formulaire, il est posté, mais ma fonction ne fonctionne pas pour une raison quelconque. Le champ caché DOIT être ajouté à mon formulaire comme je peux le voir avec Firebug mais il n'est tout simplement pas envoyé avec les données POST.HTML Formulaire HIdden champs ajoutés avec Javascript non POSTing

Juste pour noter, j'utilise un tableau en Javascript pour contenir les éléments jusqu'à ce que le formulaire soit soumis qui les affiche aussi visiblement pour que l'utilisateur voit ce qu'ils ont ajouté. J'utilise la notation [] sur le champ "nom" de l'élément car je veux que les liens alimentent un tableau en PHP.

est ici la création de lien qui est ajouté à ma forme:

 function make_hidden_element_tag(item_type, item_content, item_id) 
{ 
    return '<input type="hidden" name="' + item_type + '[]" id="hidden_link_' + item_id + '" value="' + item_content + '"/>'; 

Est-ce que quelqu'un a une idée pourquoi cela pourrait ne pas être publié. Comme indiqué ci-dessus, toutes les balises codées en dur qui sont presque identiques à celles ci-dessus fonctionnent bien, c'est juste que cette balise ne fonctionne pas. Voici comment j'ajouter l'étiquette à la forme avec JQuery:

$('#link_td').append(make_hidden_element_tag('links', link, link_array.length - 1)); 

J'utilise le cadre Kohana 3, bien que je ne suis pas sûr qui a une incidence sur cela parce que cela ne fait vraiment rien de l'heure à laquelle le HTML est ajouté à la page et le bouton de soumission est enfoncé.

Répondre

2

Je viens de comprendre quel était le problème. Je suis gêné et confus. Comme indiqué, j'utilise Kohana Framework. Je ne suis pas sûr que cela a quelque chose à voir avec cela, mais cela pourrait être important.

J'ai eu mes éléments dans cet ordre:

<table> 
    <form> 
     .............form stuff....... 
    </form> 
</table> 

et il ne permettait pas aux mes données ajoutées pour rejoindre le tableau POST lors de la présentation sous forme, même si les éléments qui ont été « codés en dur » en utilisant le FORMULAIRE de Kohana classe travaillaient bien. Je viens juste de remarquer que ça venait avant toute la branche. J'avais cherché à m'assurer que j'avais une forme: close dans ma vue Kohana mais je n'avais jamais imaginé qu'elle se fermait juste après la balise d'ouverture.

Merci beaucoup pour votre aide. C'est l'un de ces bugs qui n'ont tout simplement pas de sens, mais je suppose que cela a du sens pourquoi le $ .append ne fonctionnait pas avant. J'ai toujours regardé et vu l'ajout directement à côté des autres balises qui étaient envoyées avec les données POST et donc supposé que tout cela se passait dans le formulaire.

Quelqu'un peut-il expliquer pourquoi le besoin d'encapsuler le plutôt que vice versa pour que le HTML le rende correctement? Ou est-ce plus susceptible d'être un problème de Kohana?

Merci beaucoup pour l'aide de tout le monde, c'était une bonne leçon (mais extrêmement frustrant).

+1

Eh bien, j'aurais personnellement une table dans l'élément de formulaire plutôt que le formulaire courant (forme dans la table), de sorte que tout input/select/textarea que j'ajoute dans la table soit automatiquement ajouté au formulaire. ............... Voir mon dernier commentaire posant la question très ciblée - est l'élément #link_td à l'intérieur de l'élément de formulaire? :) –

+0

@master, il est/était dans la table et à l'intérieur du formulaire .... le formulaire a fermé directement AVANT l'étiquette donc je n'ai pas vu de problème avec ça vraiment. Je ne sais pas pourquoi cela aurait de l'importance car la table a été immédiatement suivie par l'ouverture de la balise de formulaire et la balise fermante, suivie immédiatement de la fermeture de la balise de table. Je ne suis pas sûr de comprendre quel était le problème. – dscher

+0

Ça compte. Juste pour être sûr que les gens qui suivent lisent ceci. – mplungjan

2

chère utiliser le plugin de jquery pour ajouter dynamiquement des éléments html dom, qu'est-ce que #link_td ??

+0

#link_td est une cellule de tableau dans laquelle je place les liens cachés. .ajouter? - S'il y a un autre plugin jQuery nécessaire pour ajouter des elems HTML, je ne le connais pas ... et je préfère ne pas l'utiliser. Ce n'est pas vraiment sorcier, c'est assez basique je pense. – dscher

+0

ouais, ce n'est pas vraiment une science de fusée, vous ajoutez le '' chaîne au lieu de créer le dom par jquery/javascript – Chirag

+0

jQuery est assez intelligent pour ajouter le noeud pour vous – CurtainDog

5

Si les données ne sont pas publiées sur le serveur, l'élément d'entrée n'est définitivement pas ajouté au formulaire.

Essayez d'exécuter la pièce suivante de code avant la soumission du formulaire:

<form onsubmit="return doBeforeSubmit(this);"> ... </form> 

Et la fonction est ...

function doBeforeSubmit(form) 
{ 
    var es = form.elements; 
    var l = es.length; 

    var msgs = []; 

    for(var idx = 0; idx < l; idx++) 
    { 
     var e = es[idx]; 
     msgs.push('name=' + e.name + ', type=' + e.type + ', value=' + e.value; 
    } 

    alert(msgs.join('\n')); 
    return false; 
} 

Si vous ne recevez pas votre champ, puis la « entrée » n'est pas ajouté au formulaire mais ailleurs.

Si vous obtenez le champ ... nous aurons besoin de creuser plus profondément.

+1

De même, il est intéressant de connaître et d'aimer le panneau Net de firebug. – CurtainDog

+1

@master et @curtaindog, j'utilise déjà le Firebug Net Panel et je l'adore vraiment. Malheureusement, mes données ne sont pas dans les données POST envoyées au serveur lorsque le formulaire est soumis. Comme indiqué ci-dessus, l'élément caché que je veux ajouter est l'ajout à mon document exactement là où je le veux quand j'exécute ma fonction javascript ... il ne finit pas dans les données POST. En outre, mon élément masqué ressemble exactement à celui qui figure dans le formulaire et qui est soumis à POST. Je me demande si c'est un problème de cadre? – dscher

+0

Avez-vous eu votre champ dans la liste des éléments dans le formulaire? –

Questions connexes