Goedendag,

ik ben bezig om via een form een change door te voeren.
echter loop ik er een beetje op vast.

Dit is mijn form


<form method="post" action="">
				<td>
					<select id="selectBox" onchange="sendData(this);">
						<option value="0"></option>
						<option value="1" style="background-color: #ff0000"></option>
						<option value="2" style="background-color: #3000ff"></option>
						<option value="3" style="background-color: #36ff00"></option>
						<option value="4" style="background-color: #e400ff"></option>
						<option value="5" style="background-color: #fff000"></option>
					</select>
				</td>
<input type="hidden" name="id" value="'.$res['id'].'" />
</form>


als ik de kleur verander dan geeft var_dump post aan
array(1) { ["id"]=> string(1) "1" }

dit klopt omdat ik de eerste doe.
echter neemt hij de hidden input niet mee en dit is wel nodig.

Hoe kan ik het maken zodat ook de hidden id mee wordt gestuurd?
Thomas de vries op 31/07/2017 10:11:57

als ik de kleur verander dan geeft var_dump post aan
array(1) { ["id"]=> string(1) "1" }

echter neemt hij de hidden input niet mee en dit is wel nodig.


Dat is de hidden input.

Geef je select een name="...".
Heb het verandert.

<form method="post" action="" id="myform">
				<td>
					<select id="selectBox" name="color" onchange="sendData(this);">
						<option value="0"></option>
						<option value="1" style="background-color: #ff0000"></option>
						<option value="2" style="background-color: #3000ff"></option>
						<option value="3" style="background-color: #36ff00"></option>
						<option value="4" style="background-color: #e400ff"></option>
						<option value="5" style="background-color: #fff000"></option>
					</select>
				</td>
				<input type="hidden" name="id" value="'.$res['id'].'" />
				</form>


JQuery

function sendData(id) {
	var value = id.value;
	
	$('#output').html('<img src="LoaderIcon.gif" />');
	jQuery.ajax({
		url: "ajax.php",
		data:'id='+value,
		type: "POST",
		success:function(data){$('#container').html(data);}
	});
}


Ouput is nog steeds
array(1) { ["id"]=> string(1) "1" }

en dat is niet van de hidden input. Omdat de hidden input een id heeft van 546
Maar waarom wil je dan 2 velden met de naam id hebben? Dat is vragen om problemen.
Valkuilen zijn:
- geen of dubbele name attributen
- formuliervelden die niet tussen <form> en </form> geplaatst zijn
- formulieren met een disabled attribuut worden niet gepost
- formulieren mogen niet in elkaar genesteld zijn (<form> ... <form> ... </form> ... </form>)



[size=xsmall]Toevoeging op 31/07/2017 12:18:35:[/size]

oh wait...

SendData(this) ... this lijkt mij naar je select te verwijzen. wellicht is dat de reden. Laat die functie SendData eens zien?
Hoi frank

hier is de functie

function sendData(id) {
    var value = id.value;
    
    $('#output').html('<img src="LoaderIcon.gif" />');
    jQuery.ajax({
        url: "ajax.php",
        data:'id='+value,
        type: "POST",
        success:function(data){$('#container').html(data);}
    });
}

Met jquery's .serialize() kun je je hele formulier in een keer posten:

function sendData() {
    var data = $("#myform").serialize();

    // debug regeltje
    console.log(data);

    $('#output').html('<img src="LoaderIcon.gif" />');

    jQuery.ajax({
        url: "ajax.php",
        data: data,
        type: "POST",
        success:function(data){$('#container').html(data);}
    });
}


[size=xsmall]Toevoeging op 31/07/2017 12:28:11:[/size]

this is niet meer nodig bij het aanroepen van je functie
Dank je Frank.
Bijna klaar. Het werkt namelijk nog niet 100%


while($res = $query->fetch_assoc())
			{
				if($res['train_set'] == 1) {
					$set = 'Set';
				} else {
					$set = '';
				}
				
				switch($res['train_type'])
				{
					case 0: $type = ''; break;
					case 1: $type = 'S'; break;
					case 2: $type = 'D'; break;
					case 3: $type = 'E'; break;
					case 4: $type = 'M'; break;
				}
				switch($res['train_use'])
				{
					case 1: $selected = '<option value="1" selected>'.$res['train_use'].'</option><option value="0">0</option>'; break;
					case 0: $selected = '<option value="0" selected>'.$res['train_use'].'</option><option value="1">1</option>'; break;
				}
				echo '
				<tr>
				<form method="post" action="" id="myform">
				<td>
					<select class="test" name="color" onchange="sendData();">
						<option value="0"></option>
						<option value="1" style="background-color: #ff0000"></option>
						<option value="2" style="background-color: #3000ff"></option>
						<option value="3" style="background-color: #36ff00"></option>
						<option value="4" style="background-color: #e400ff"></option>
						<option value="5" style="background-color: #fff000"></option>
					</select>
				</td>
				<input type="hidden" name="id" value="'.$res['id'].'" />


Zoals je kunt zien zit het hidden field ook in de while loop.
echter maakt het niet uit welke row ik selecteer hij geeft altijd maar 1 id weer.
Dus de output
is nu dit

Als ik de eerste row pak met de eerste kleur dan heb ik als output
array(2) { ["color"]=> string(1) "1" ["id"]=> string(3) "348" }

Pak ik de 2de row met de eerste kleur dan heb ik als output
array(2) { ["color"]=> string(1) "0" ["id"]=> string(3) "348" }

dus hij verandert de kleur niet en ook de juiste id geeft die niet mee.

Of miet ik de function ook in de while loop zetten?

oke door de while echo je meerdere formulieren onder elkaar. En een gouden regel in HTML is dat een id maar één keer voor mag komen (een class mag wel meerdere keren voorkomen).

Je zult dus het id van de <form> in je lus telkens moeten wijzigen. Dit kan bijvoorbeeld als volgt:
<?php
echo '
<tr>
<form method="post" action="" id="myform' . ++$i . '">'
?>

Vervolgens krijg je dan nog het probleem dat je functie SendData wel moet weten welk formulier hij moet posten..

hiervoor zou je $i mee kunnen geven als parameter

onchange="sendData(<?php echo $i; ?>);"



en je functie wordt dan iets als:
function sendData(nr) {
    var data = $("#myform" + nr).serialize();

    // debug regeltje
    console.log(data);

    $('#output').html('<img src="LoaderIcon.gif" />');

    jQuery.ajax({
        url: "ajax.php",
        data: data,
        type: "POST",
        success:function(data){$('#container').html(data);}
    });
}


Frank heel erg bedankt.
Het werkt nu zoals ik het in gedachten heb.

Nu kan ik er mee verder.
Ook je tips heb ik wat aan gehad.

Reageren