webForumDet fria alternativet

Skicka data från dynamiska divar

9 svar · 623 visningar · startad av solbulle

solbulleMedlem sedan mars 20015 287 inlägg
#1

Ja.. jag vet inte hur smart det är att försöka ge sig på script som man verkligen inte förstår...

Jag har kommit över ett javascript som bla annat använder sig av "div" mm för att räkna ut en massa värden.
Till saken hör nog även att scriptet kan dynamiskt lägga till fler fält - någom som ställer till det för mig.

Nu till mitt problem, jag vill kunna "fånga upp" resultatet av vad detta javascript räknar ut på en annan sida.

Så mycket har jag förstått att jag måste "föra över" datan från mina div till vanliga formulärfältet när jag postar en form till en annan sida.

Jag fann denna fråga: http://www.webforum.nu/showthread.php?t=107946&highlight=skicka+div

<script type="text/javascript"> 
function send(){
document.foo.bar.value=document.getElementById("divens_id").innerHTML;
document.foo.submit();
};
<script>
<div id="divens_id">Text som kommer att skickas...</div>

<form name="foo" method="post" action="send_info.php">
<input type="text" name="bar">
</form>
<button onclick="send()" name="send">Skicka</button>

Detta får jag till att fungera... dock iom att javascriptet är dynamiskt och man med hjälp av den ursprungliga koden kan lägga till flera fält så hur löser jag det?

Det hela är uppbyggt av liknande satser:

$('result-'+n+'-d').innerHTML = osv. osv..

Om jag då hårdkodar så fungerar det ju (när n = 1):

document.foo.bar.value=document.getElementById('result-1-h').innerHTML;

osv..

Men kan man även göra detta dynamiskt?

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#2

solbulle skrev:

Ja.. jag vet inte hur smart det är att försöka ge sig på script som man verkligen inte förstår...

Jag har kommit över ett javascript som bla annat använder sig av "div" mm för att räkna ut en massa värden.
Till saken hör nog även att scriptet kan dynamiskt lägga till fler fält - någom som ställer till det för mig.

Nu till mitt problem, jag vill kunna "fånga upp" resultatet av vad detta javascript räknar ut på en annan sida.

Så mycket har jag förstått att jag måste "föra över" datan från mina div till vanliga formulärfältet när jag postar en form till en annan sida.

Jag fann denna fråga: http://www.webforum.nu/showthread.php?t=107946&highlight=skicka+div

<script type="text/javascript"> 
function send(){
document.foo.bar.value=document.getElementById("divens_id").innerHTML;
document.foo.submit();
};
<script>
<div id="divens_id">Text som kommer att skickas...</div>

<form name="foo" method="post" action="send_info.php">
<input type="text" name="bar">
</form>
<button onclick="send()" name="send">Skicka</button>

Detta får jag till att fungera... dock iom att javascriptet är dynamiskt och man med hjälp av den ursprungliga koden kan lägga till flera fält så hur löser jag det?

Det hela är uppbyggt av liknande satser:

$('result-'+n+'-d').innerHTML = osv. osv..

Om jag då hårdkodar så fungerar det ju (när n = 1):

document.foo.bar.value=document.getElementById('result-1-h').innerHTML;

osv..

Men kan man även göra detta dynamiskt?

Ett sätt skulle väl vara att du modifierar scriptet och ser till att det lägger till en css-class på de dynamiska diverna divarna.

Då skulle du kunna loopa igenom samtliga divar som har css-classen du har gett dem. Då kan du antigen för varje item i kollektionen skapar ett dynamiskt formulär element med namnet name="fieldn" där n är n+1 för de dynamiska diverna alternativt att du skapar ett formulärfält för varje item i kollektionen med namnet name="fieldvalues[]" alternativt att du bygger upp en sträng: som separerar värdena med ex. , ; | som du sedan lägger in i ett formulärfält.

Detta beror ju lite grann på hur du vill fånga upp datan och spara den också som avgör vilken lösning som passar bäst.

SPiNMedlem sedan mars 20007 896 inlägg
#3

Returnerar inte document.getElementById() 'undefined' i alla(?) webläsare när ett element inte finns?

var i = 0;
while ((elem = document.getElementById('result-' + i++ + 'h')) != 'undefined') {
    elem.innerHTML = ...
...
solbulleMedlem sedan mars 20015 287 inlägg
#4

Jo det är ju som sagt en nackdel emellanåt när man ska ge sig på o modifiera befintliga grejer som man inte själv förstår sig på. :)

Jag har en asp-sida som ska ta hand om infon och spara den i en db så där känner jag att man har ganska stor handlingsfriet att ta hand om infon som sänds.
(En liten tanke jag hade var att sen kanske kunna populera(?) den ovan visade koden/fälten/divarna med dess data ur databasen, men det kanske blir ett än värre jobb..

Kanske är det lättare för mig att skriva om den ursprungliga sidan med enklare kod som är direkt inriktad på att datan ska sparas?

Men.. tillbaks till era svar..

Spin: Det där verkar kunna vara något... dock fastnar den i en loop så det verkar inte gå att använda sig av "undefined"

-Finns det något sätt att få reda på vad som verkligen ges tillbaks till webläsaren som man kan trigga det hela på?

Annars skulle jag ju kunna gå bakvägen o låta en loop kolla om fälten/värdena finns, men det känns ju lite tokigt.

SPiNMedlem sedan mars 20007 896 inlägg
#5

Då verkar det som att olika webläsare hanterar det olika... Kanske följande fungerar bättre?

for (i = 0; true; i++) {
    elem = document.getElementById('result-' + i + '-h');

    if (!elem)
        break;

    elem.innerHTML = ...
...
solbulleMedlem sedan mars 20015 287 inlägg
#6

Ah Spin. Det där fungerar, jag knåpar vidare på det.

solbulleMedlem sedan mars 20015 287 inlägg
#7

Jäklar i mig att jag inte kan fånga upp alla värden jag vill åt.

De som följer ovantående mönster fungerar fint..

Kan jag på något sätt loopa ut namnen på alla divar som finns på sidan (och dess värden) i ren testavseende?

dAEkMedlem sedan feb. 20041 816 inlägg
#8

Jag tycker att det vore enklare att ha använda class="foo" istället för att hålla på och joxxa runt med id:n+n (id_1, id_2 etc). Med bra dokumentation blir det ungefär som interface i OOP där varje HTML-element med klassen "foo" alltid måste innehålla vissa HTML-element - annars skippas noden.

Stödet för document.getElementsByClassName() är sådär lagom halvt fungerande bland dagens webbläsare (IE saknars) men det blir bättre. De vanligaste Javascript-ramverken brukar implementera den funktionen så det borde vara safe att utgå från att den finns. Använder man t.ex. jQuery slipper man tänka på det öht.

Hur som helst: jag förstår om du inte vill ändra fungerande kod. Stämmer det att koden funkar som så i det accepterade svaret?

solbulleMedlem sedan mars 20015 287 inlägg
#9

Uj, asp är jag till viss del bevandrad i, detta är däremot verkligen inte min sida.

Kan ni ge ett exempel på hur jag implementerar class="foo" och sen "läser den"?

Just dessa fält som följer den struktur som avhandlas tidigare fungerar, men sen när jag gav mig på det jag trodde skulle vara en mindre utmaning så gick jag bet, dessa finns det bara ett av och de är ej dynamiska ens.

<fieldset><legend>Mål</legend>
<label for="target-x">X: </label>
<input id=target-x >
<label for="target-y">Y: </label>
<input id=target-y > </fieldset>

Här fixar jag inte att få ut något värde alls, inget felmess eller så.

När jag försöker plocka ut det valda värdet ur en selectlista får jag ut hela listan. Hur når jag det som är valt tro?

solbulleMedlem sedan mars 20015 287 inlägg
#10

Jaha, det var ju inte så svårt att få ut det valda värdet (eller dess position) till och med logiskt. :)

document.getElementById('spelare' + i ).selectedIndex;

eller

document.getElementById('spelare' + i ).value;

beroende på vad man vill plocka ut.

132 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)