value dropdownlist met javascript pakken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

L deB

L deB

06/03/2016 16:39:47
Quote Anchor link
Hallo beste mensen, ik kom ergens weer niet uit, dus hoop dat iemand mij wil en kan helpen.

Ik toon via een while loop producten die uit het assortiment worden gehaald. Zoals de volgende code:

Quote:
$results = $mysqli->query("SELECT product_code, dikte, product_name, product_desc, product_img_name, price "
. "FROM products WHERE groepsnummer = $groepsnummer ORDER BY id ASC");
if ($results) {

echo "<ul class='products'>";
$productnummer = 0;
while ($obj = $results->fetch_object()) {
$productnummer++;

En dan onder die while de opmaak en de resultaten uit de database, zoals de prijs van het product etc.

De variabele $productnummer heb ik aangemaakt en laat ik vermeerderen omdat ik deze toevoeg aan het id van de <input> zodat elk id uniek is. Zoals dit:

Quote:
echo "<input type='hidden' id='productprijs".$productnummer."' name='productprijs' value='{$obj->price}' />";


Dan krijg je uiteindelijk dit:

Afbeelding

Van het rechtergedeelte maak ik een preview (nog zonder opmaak nu) die via AJAX direct alles berekent en toont. Dit werkt, voor alles behalve voor de 'dikte steel'. De value van deze dikte bevindt zich namelijk dus binnen de select en ik weet niet hoe ik die bij de 'onkeyup' event moet pakken.

Hieronder het stukje code waarmee ik de overige waarden pak bij de onkeyup:

Quote:
<input type='text' onkeyup=\"loadDoc(this.value, getValue('productprijs".$productnummer."'), getValue('productcode".$productnummer."', getValue('dikte".$productnummer."')))\" size='2' maxlength='2' name='product_qty' id='aantal' value='1' />


In dit stukje code moet ik dan dus, lijkt me, op de juiste wijze de dikte binnen de dropdownlist pakken. Het is me alleen tot nu toe niet gelukt, ook niet na lezen en redelijk wat uitproberen.

Hoe pak ik die value?

Alvast bedankt :)

Edit: misschien als nuttige toevoeging even hoe de code van die dropdownlist eruit ziet
Quote:
echo 'Dikte steel: <select name="dikte" id="dikte'.$productnummer.'" >';
$dikte = explode("@", $obj->dikte);
foreach ($dikte as $key => $value) {
echo '<option value="' . $value . '">' . $value . '</option>';
}
echo '</select> cm. <br/><br/>';
Gewijzigd op 06/03/2016 16:48:34 door L deB
 
PHP hulp

PHP hulp

29/03/2024 16:24:27
 
Randy vsf

Randy vsf

06/03/2016 17:55:37
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var value = document.getElementById('idVanJeSelectList').value


Hiermee haal je de value uit een select list.


Edit:
Ik zie nu dat je een document inlaad met de keyup, en de variables wilt doorgeven.

Staat er hier niet een ) verkeerd?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type='text' onkeyup=\"loadDoc(this.value, getValue('productprijs".$productnummer."'), getValue('productcode".$productnummer."', getValue('dikte".$productnummer."')))\" size='2' maxlength='2' name='product_qty' id='aantal' value='1' />



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type='text' onkeyup=\"loadDoc(this.value, getValue('productprijs".$productnummer."'), getValue('productcode".$productnummer."'), getValue('dikte".$productnummer."'))\" size='2' maxlength='2' name='product_qty' id='aantal' value='1' />
Gewijzigd op 06/03/2016 18:08:07 door Randy vsf
 
Thomas van den Heuvel

Thomas van den Heuvel

07/03/2016 12:42:34
Quote Anchor link
Gebruik je een generieke aanpak?

Bijvoorbeeld als volgt:
Bij elke wijziging is er een reële kans dat dit van invloed is op de eindprijs, zodoende zou er bij elke (willekeurige) wijziging voldoende aanleiding kunnen zijn voor het starten van een routine die de prijs opnieuw berekent, bijvoorbeeld "updatePrice()".

Deze ene routine "scant" alle relevantie informatie in het formulier: de geselecteerde producten, hoeveelheden en andere ter zaken doende eigenschappen. Vervolgens roep je met deze informatie via een AJAX call een script aan die de nieuwe totaalprijs berekent en weergeeft.

Wat je ook nog kunt doen is het volgende: je slaat de bijgewerkte informatie (via AJAX) op in je sessie (je zult sowieso een soort van shoppingcart moeten hebben?). Als dit is geslaagd roep je via AJAX het script aan die de nieuwe prijs berekent en weergeeft, waarbij je gebruik maakt van de informatie in je sessie - je hoeft dan niet alle informatie opnieuw door te geven via AJAX want alle (bijgewerkte) informatie zit al in je sessie.
 
L deB

L deB

09/03/2016 17:25:15
Quote Anchor link
Bedankt beide, heb het opgelost. Ook een probleem wat ik erna tegenkwam toen ik vanuit de dropdown hetzelfde wou doen.

Randyvsf, die stond inderdaad verkeerd. Ik weet niet of dat het enige was, heb nogal veel uitgeprobeerd verder ook. Het werkt nu wel.

Thomas van den Heuvel: op dit moment stuur ik een AJAX request die ik aanstuur per <input>.
Bijvoorbeeld:
Quote:
echo "<input type='text' onkeyup=\"loadDoc(this.value, getValue('productprijs" . $productnummer . "'), getValue('productcode" . $productnummer . "'), getValue('dikte" . $productnummer . "'), getValue('productnaam" . $productnummer . "'), getValue('productafbeelding" . $productnummer . "'), getValue('productomschrijving" . $productnummer . "'))\" size='2' maxlength='2' name='product_qty' id='aantal' value='1' />";


loadDoc is een simpele AJAXrequest die ik laat gaan naar ajaxquerie.php en dit bestand regelt de opmaak en inhoud en echo'ed die terug. Op dit moment werkt dat gedeelte nu:

Afbeelding

Ook die extra kosten kloppen trouwens voor als iemand zich dat afvraagt, 1 cm. is de standaard en heeft geen extra kosten.

Toen dit werkte geprobeerd om hetzelfde voor elkaar te krijgen bij de dropdownlist. Lukte me urenlang niet. Toen 2 keer een \ toegevoegd zoals hieronder:

Quote:
onchange=\"loadDocnieuw(this.value, getValue('aantal'))\">";


Ook onchange in plaats van keyup.

Geen idee waarom die \ perse nodig is maar dat is gewoon mijn gebrek aan kennis, weet nauwelijks iets van javascript. Maar uiteindelijk dus wel gelukt :) bedankt beide
Gewijzigd op 09/03/2016 17:25:44 door L deB
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.