ugrás a tartalomhoz

Js-el generált input és történtete

elek9914 · 2011. Szep. 4. (V), 20.21
Sziasztok!

Kérném a segítségetek a következőben:
Adott egy form, benne mindenféle és típusú mezővel. Van egy select, amivel kapcsolatban nem lehet előre tudni, hogy hány darabra lesz szükség az űrlap kitöltésekor, úgyhogy a felhasználó magának generál egy link+javascript segítségével annyit amennyire szüksége lesz.
A baj az, hogy sajnos ezek a generált beviteli mezők elküldés után nem kerülnek be a
  1. $_POST  
- ba, egyik sem. Csak az az egy amit nem js generált hanem alapból adott volt!

Az 1 darab adott select neve:
  1. name="sor1"  
az összes generált = sor2, sor3, sor4.....

Így a
  1. $_POST['sor1']  

okés lesz, de a
  1. $_POST['sor2']  
és társai már nem. Egyszerűen nincs ilyen index.

A kérdésem az, hogy így volt ez mindig? És keressek más megoldást erre? Vagy én rontok el valamit és mennie kellene?
Köszönöm,
Elek
 
1

Kód

Schmidi · 2011. Szep. 4. (V), 21.23
Mutass konkrét példát / kódot légy szíves.
2

Nem

Poetro · 2011. Szep. 4. (V), 22.02
Ha valódi HTML <form>-ot használsz, amit POST-tal küldesz el, és annak része a select elem (azaz a form elemen belül van), akkor a PHP POST tömbjében benne kell, hogy legyen. Ha ezek valamelyike nem teljesül, akkor lehetséges valami gubanc.
3

Ilyennel már én is

Totti 1986 · 2011. Szep. 4. (V), 22.09
Ilyennel már én is találkoztam.
Azt hiszem ha sima innerHTML-lel teszi be utólag a formba az új inputokat, akkor nem veszi figyelembe elküldéskor.
4

válasz

elek9914 · 2011. Szep. 4. (V), 23.14
Az első válaszra a válasz:
a js része:
  1. ...  
  2.         var divTag = document.createElement(\"div\");  
  3.     divTag.id = \"resz\";  
  4.     divTag.innerHTML = div_tartalom;  
  5.     document.getElementById(\"div_nev\").appendChild(divTag);  
  6.   
  7. ...  
az escape-elés a php-ben történő születés miatt van.
a php része mindegy, mert próbaképp egy egyszerű
  1. foreach($_POST as $k=>$v){  
  2.         echo "".$k." = ".$v."";  
  3.         }  
tesztfüggvénnyel sem látom a POST-ban ezeket, csak a nem generált inputok neveit és értékeit.

Az második válaszra a válasz:

Átnéztem többször is a generált HTML-t és jó helyen vannak a nyitó/záró form tagok. Én is gondoltam rá, hogy figyelmetlenségből bezártam előtte a formot. De nem :(

Az harmadik válaszra a válasz:

Igen én is erre gyanakszom.

Kipróbáltam több böngészővel is, nem e böngésző függő. De Mozilla, Opera, Chrome... ugyanaz. Ami furcsaság, de félig meddig érthető, hogy ha megnézem az oldal forrását miután kinyitogatom ezeket az inputokat akkor azt látom hogy nincs a forrásban. De ha kijelölök egy területet az oldalon beleértve ezeket a generált inputokat és annak a kijelölt rész forrását nézem meg akkor pedig ott van. De elküldéskor figyelmen kívül marad.
6

Nem csak id-t, hanem name

Hidvégi Gábor · 2011. Szep. 5. (H), 06.10
Nem csak id-t, hanem name attribútumot is meg kell adni, mert az kerül bele a $_POST tömbbe.
5

megoldás?

elek9914 · 2011. Szep. 5. (H), 00.08
Keresgéltem, googleliztam és ezt találtam:
  1. <script type="text/javascript">  
  2.   
  3. function updateDOM(inputField) {    
  4.     
  5.     if (typeof inputField == "string") {    
  6.     inputField = document.getElementById(inputField);      
  7.     }          
  8.     if (inputField.type == "select-one") {   
  9.         for (var i=0; i<inputField.options.length; i++) {  
  10.             if (i == inputField.selectedIndex) {     
  11.                 inputField.options[inputField.selectedIndex].setAttribute("selected","selected");   
  12.             }          
  13.         }  
  14.     }   
  15.     
  16.     else if (inputField.type == "select-multiple") {  
  17.         for (var i=0; i<inputField.options.length; i++) {  
  18.             if (inputField.options[i].selected) {  
  19.                 inputField.options[i].setAttribute("selected","selected");  
  20.             }  
  21.             else{   
  22.             inputField.options[i].removeAttribute("selected");   
  23.             }   
  24.         }  
  25.     }   
  26.     else if (inputField.type == "text") {  
  27.         inputField.setAttribute("value",inputField.value);  
  28.     }   
  29.     else if (inputField.type == "textarea") {  
  30.         inputField.setAttribute("value",inputField.value);  
  31.         inputField.innerHTML = inputField.value;  
  32.     }  
  33.     else if (inputField.type == "checkbox") {  
  34.         if (inputField.checked) {  
  35.         inputField.setAttribute("checked","checked");  
  36.         }  
  37.         else{   
  38.         inputField.removeAttribute("checked");  
  39.         }  
  40.     }  
  41.     else if (inputField.type == "radio") {  
  42.         var radioNames = document.getElementsByName(inputField.name);  
  43.         for(var i=0; i < radioNames.length; i++) {  
  44.             if (radioNames[i].checked) {  
  45.                 radioNames[i].setAttribute("checked","checked");  
  46.             }  
  47.             else{  
  48.                 radioNames[i].removeAttribute("checked");  
  49.                 }  
  50.             }  
  51.         }  
  52.     }  
  53. </script>  
aztán az inputokra:
  1. onBlur="updateDOM(this)"  
Talán ez segíthet :) holnap kipróbálom és jelzem, hogy sikerült-e.

Köszönöm az eddigi segítséget, ha valakinek van még ötlete szívesen várom!
Elek
7

Poetro-nak lesz igaza

elek9914 · 2011. Szep. 5. (H), 08.16
Nos a fenti js nem segít. Viszont találtam egy példát, ami egyszerűsítve ugyanígy működik mint nálam, és bizony elküldi azokat is. Csak valami nem oké nálam.

itt a példa:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  2. "http://www.w3.org/TR/html4/loose.dtd">  
  3. <html>  
  4. <head>  
  5. <title>Untitled Document</title>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">  
  7. </head>  
  8.   
  9. <body>  
  10. <script type="text/javascript">  
  11. //<![CDATA[  
  12. darab = 0;  
  13. function bovit(mit)  
  14. {  
  15.   darab++;  
  16.   var divem = document.createElement('div');  
  17.     ki = '\n<input type="text" size="40" name="szoveg'+darab+'" id="szoveg'+darab+'" value="">\n';  
  18.     ki+= '<select name="select'+darab+'" id="select'+darab+'">\n';  
  19.     ki+= '<option>&nbsp;<\/option>\n';  
  20.     ki+= '<option value="3">3.<\/option>\n';  
  21.     ki+= '<option value="4">4.<\/option>\n';  
  22.     ki+= '<option value="5">5.<\/option>\n';  
  23.     ki+= '<option value="6">6.<\/option>\n';  
  24.     ki+= '<option value="7">7.<\/option>\n';  
  25.     ki+= '<option value="8">8.<\/option>\n';  
  26.     ki+= '<\/select><br>\n';  
  27.   divem.innerHTML = ki;  
  28.   mit.appendChild(divem);  
  29. }  
  30. //]]>  
  31. </script>  
  32. <form method="post" name="urlap" id="urlap" action="">  
  33. <div id="elemek">  
  34.   <input name="szoveg0" type="text" id="szoveg0" size="40">  
  35.   <select name="select0" id="select0">  
  36.   
  37.     <option>&nbsp;</option>  
  38.     <option value="3">3.</option>  
  39.     <option value="4">4.</option>  
  40.     <option value="5">5.</option>  
  41.     <option value="6">6.</option>  
  42.     <option value="7">7.</option>  
  43.   
  44.     <option value="8">8.</option>  
  45.   </select>  
  46. </div>  
  47. <input type="button" value="Új elem" name="Uj" onclick="bovit(document.getElementById('elemek'))">  
  48. <input type="submit" value="Mehet" name="mehet">  
  49. </form>  
  50.   
  51. <pre>Array  
  52. (  
  53.     [szoveg0] =>   
  54.     [select0] => 7  
  55.     [szoveg1] =>   
  56.     [select1] => 8  
  57.     [szoveg2] =>   
  58.     [select2] => 6  
  59.     [mehet] => Mehet  
  60. )  
  61. </pre></body>  
  62. </html>  
Teszteltem és tökéletesen működik! Csak valamiért az én kódom nem. Még keresem a hibát!
8

Megoldva!

elek9914 · 2011. Szep. 5. (H), 10.19
Többszöri nekifutás után sikerült megtalálnom a hiba okát, ami részben az én figyelmetlenségem volt.

Az ominózus form inputjai akár 80-100 db ot is jelenthet ami itt ott van elhelyezve a sűrű div-ek és tablek-k rengetegében. Az inputok (meglévők és generáltak) a nyitó és záró <form> tagok között voltak ugyan, de maguk a form tagok nem ugyanazon a div-en belül voltak. Hanem egyel alrébb. Lebutított példa:
  1. <div ...>  
  2.     <div ...>  
  3.         <form ...>  
  4.             <div ...>  
  5.               
  6.             soksok elem  
  7.               
  8.             </div>  
  9.     </div>  
  10.         </form>  
  11. </div>  


Számomra tanulság, hogy nagyon figyelnem kell a rendezettségre. Sok óra felesleges plusz munkától kímél meg.

Köszönöm nektek a segítséget. Jövök még ha elakadok!
Elek