Javascript toont de velden horende bij de eerder geselecteerde waarden uit dropdown niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Brecht S

Brecht S

20/01/2015 19:52:56
Quote Anchor link
Dit gaat hier over een dropdown die velden laat verschijnen afhankelijk van de keuze van de dropdown.
Dit werkt perfect als je de waarde nog moet kiezen maar niet als ze al gekozen is zoals hieronder. Dit betreft een aanpaspagina van eerder ingevulde gegevens.

De dropdown:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$sql = "SELECT * FROM accountics WHERE id = '$id'";
$res = mysql_query($sql) or die (mysql_error());
                  
while($row = mysql_fetch_assoc($res)) {


<div class="col-sm-10">
  <select name="categorie" class="form-control" id="selectMe">
    <option selected value="<?php echo $row['categorie']; ?>"><?php echo $row['categorie']; ?></option>
                                        
         <?php                          
         $sql1
= "SELECT distinct naam FROM lijst_accountics_categorie";
         $res1 = mysql_query($sql1) or die (mysql_error());

                 while($row = mysql_fetch_assoc($res1)) {
         ?>
                          
                                        
         <option value="<?php echo $row['naam']; ?>"><?php echo $row['naam']; ?></option>
                                        
         <?php
         }
        
     $sql = "SELECT * FROM accountics WHERE id = '$id'";
     $res = mysql_query($sql) or die (mysql_error());
                  
         while($row = mysql_fetch_assoc($res)) {
        
     ?>
                              
                                        
  </select>
</div>


Daaronder komen de div's die moeten opgeroepen worden afhankelijk van de selectie uit de dropdown.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- Start restaurant -->
<div id="Restaurant" class="group">
                                
  <div class="col-sm-10">
     <input type="text" name="bedrag1_excl" class="form-control" id="field-1" value="<?php echo $row['bedrag1_excl']; ?>">
  </div>

</div>


<!-- Start als categorie niet gelijk is aan Restaurant -->
<div id="Geen" class="group">
                                
   <div class="col-sm-10">
       <input type="text" name="bedrag_excl" class="form-control" id="field-1" value="<?php echo $row['bedrag_excl']; ?>">
   </div>
</div>

</div>


Hieronder hebben we de javascript die daarbij hoort. Denk dat hier wel nog enkele wijzigingen zullen aan moeten gebeuren om dit goed werkende te krijgen. Verder uitleg staat onder de javascript code.
De waarde 'Geen' betreft alles wat niet als restaurant is geselecteerd.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
$(document).ready(function () {
  $('.group').hide();
  $('#Geen').show();
  
  $('#selectMe').change(function () {
    $('.group').hide();
    
var Restaurant = document.getElementById("selectMe").value;    

if(Restaurant === 'Restaurant') {
    $('#Restaurant').show();
} else {
    $('#Geen').show();
}    

  })
});
</script>


Als ik die aanpaspagina refresh staan de waarden uit de database in de dropdown wel juist ingevuld maar de velden die overeen komen met de geselecteerde waarde houden geen rekening met de javascript. Dus ze komen niet naar boven. Wat is er aan mijn javascript fout?
 
PHP hulp

PHP hulp

23/04/2024 11:51:45
 
Peter  Flos

Peter Flos

20/01/2015 21:18:47
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
$('#selectMe').change(function () {
    $('.group').hide();
    
var Restaurant = document.getElementById("selectMe").value;    

if(Restaurant === 'Restaurant') {
    $('#Restaurant').show();
} else {
    $('#Geen').show();
}    

  })


Dit deel wordt gestart als de div met id selectMe wordt gewijzigd, niet als de pagina inlaad. In jouw geval worden de waardes al eerder geselecteerd en moet je dat deel dus naar de de document ready zetten zodat het wordt ingeladen als de pagina start.
 
Brecht S

Brecht S

20/01/2015 21:36:12
Quote Anchor link
Nee dat is het niet. Nu krijg ik beide div's te zien, zowel die van restaurant als die van geen.
Wat wel werkt is als je dan even dat veld aanpast in iets anders en dan terug zet op restaurant werkt het wel. Maar niet bij het inladen van de pagina.
Gewijzigd op 20/01/2015 21:37:33 door Brecht S
 
Peter  Flos

Peter Flos

20/01/2015 21:50:05
Quote Anchor link
Waarschijnlijk werkt dat niet omdat elke option een SELECTED mee krijgt in regel 9.
 
Brecht S

Brecht S

20/01/2015 22:03:44
Quote Anchor link
Hoe kan ik anders weten wat er al was opgeslagen in de database? Dit kan ik niet weglaten anders start die iedere keer bij een lege select... Andere oplossingen hiervoor?
 
Jan de Laet

Jan de Laet

21/01/2015 18:40:24
Quote Anchor link
Even uitgaande van je eerste dropdown uit je post.

In je select bouw je een lijst met options.
Waarom laat je categorie zien als optie (op regel 9) plus alle waardes uit lijst_accountics_categorie (op regel 18 in de lus)?
En waarom maak je die op regel 9 altijd selected? Zou dat niet de option regel moeten zijn waarvan de waarde in de database staat?

Iets als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
         <option value="<?php echo $row['naam']; ?>" <?php echo ($categorie == $row['naam']) ? "selected" : ""; ?>><?php echo $row['naam']; ?></option>

Dit maakt die option selected waarvan de naam gelijk is aan de categorie.
$categorie = $row['categorie'] gezet, voor regel 12 (omdat je 2 maal $row gebruikt voor je sql resultaat).

Ook hier weer, uit de losse pols opgetikt, dus misschien hier en daar een foutje.
Gewijzigd op 21/01/2015 18:42:22 door Jan de Laet
 
Brecht S

Brecht S

21/01/2015 20:09:43
Quote Anchor link
Regel 9 geeft het resultaat wat in de database staat als option weer, en de value is dezelfde naam omdat dat in de javascript is gebruikt.
Regel 18 is nodig als je de dropdown opent dat er waarden in staan. Anders is dat leeg... Zo kan je van de eerder geselecteerde option die veranderen door iets anders te kiezen in de lijst en dit zijn dan de waarden uit de lijst_accountics_categorie.

Ik zal jouw manier eens bekijken, jan. Geen idee wat de uitkomst daarvan gaat zijn. Misschien dat dit inderdaad wel werkt dan. Ik laat nog iets weten hier straks.



Toevoeging op 21/01/2015 21:49:53:

@Jan: ik heb alles beetje aangepast en het resultaat is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<option value="<?php echo $row['naam']; ?>" <?php if ($categorie == $row['naam']) { echo "selected"; } else { echo ""; } ?>><?php echo $row['naam']; ?></option>


En natuurlijk eerst juist onder de while loop de regel $categorie = $row['categorie'] toevoegen.

Maar het is nog steeds hetzelfde resultaat. Mijn eerdere versie en de jouwe zijn hetzelfde. Alleen spaar ik met jouw versie een regel uit.
Het zal dus wel een javascript probleem zijn, maar niemand weet hier precies wat het probleem is want de reacties zijn heel laag.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/01/2015 09:42:52
Quote Anchor link
Wat wil je hier mee bereiken? In de html staan 2 div's met exact dezelfde inhoud, zelfs id's zijn hetzelfde (wat niet mag).
In wat pseudo code doe je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if (x == "Restaurant") {
    echo 'Hallo wereld';
}

else {
    echo 'Hallo wereld';
}

?>
 
Brecht S

Brecht S

22/01/2015 12:44:33
Quote Anchor link
Nu ben ik niet meer mee. Zelfde id's? Zelfde div's?
Bedoel je dan bij de input velden? Dit zit volledig in een bootstrap framework dus dezelfde id's op input fields kan maar heeft niks met de javascript te maken.
Kan je eens uitleggen wat je bedoeld met je pseudo code?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/01/2015 14:08:22
Quote Anchor link
Ik dacht dat de div's exact hetzelfde waren maar er zit inderdaad een miniem verschil in.

Wat ik op maak aan de hand van de door jouw aangeleverde informatie is dat je dingen onnodig moeilijk aan het maken bent.

Buiten dat, je hebt het verbergen/tonen van de div's in de change evenListener staan, dus dit wordt pas uitgevoerd nadat er iets veranderd in the select (dit is al eerder door Peter Flos aangegeven).
Maar als je dus NA het aanmaken van de eventListener de event triggert:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
    $("#selectMe").trigger("change");

Dan zal het met de aan zekerheid grenzende waarschijnlijkheid wel goed gaan
Gewijzigd op 22/01/2015 16:51:02 door Ger van Steenderen
 
Brecht S

Brecht S

22/01/2015 14:34:48
Quote Anchor link
Nu begrijp ik niet waar ik die trigger moet invoeren. Moet ik dan regel 6 van de javascript veranderen door jouw voorbeeld?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/01/2015 16:57:01
Quote Anchor link
Ik heb in mijn vorige reactie geaccentueerd waar het om gaat .......
 
Brecht S

Brecht S

22/01/2015 18:29:05
Quote Anchor link
Ik heb de oplossing gevonden. Ik had de post van Peter Flos niet goed begrepen op het eerste zicht maar zijn idee was wel in de goede richting. Ger heeft met zijn opmerking mij terug de juiste richting ingeduwd ;-) Thanks heren voor de hulp!

Even de volledige javascript posten van het uiteindelijke resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script>
$(document).ready(function () {
  $('.group').hide();

if($('#selectMe').val() === 'Restaurant') {
    $('#Restaurant').show();
}

else {
    $('#Geen').show();
}
  
  
  
  $('#selectMe').change(function () {
    $('.group').hide();


if($('#selectMe').val() === 'Restaurant') {
    $('#Restaurant').show();
}

else {  
    $('#Geen').show();
}


  })
});
</script>

Nu ga ik mij bezig houden met een paar varianten op dit script. Want heb er nog zo een paar staan met velden die moeten verdwijnen/verschijnen maar met andere waarden.
Gewijzigd op 22/01/2015 18:31:43 door Brecht S
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/01/2015 19:42:04
Quote Anchor link
Ja maar, je gaat toch niet telkens code herhalen.
Met .change hang je een eventListener aan een element, met .trigger('change') trigger je dat event, en wordt hetgeen binnen de eventListener staat uitgevoerd.
 
Brecht S

Brecht S

23/01/2015 10:31:12
Quote Anchor link
Dat zal ik eens uittesten straks, Ger. Ik hou je op de hoogte.
 
Brecht S

Brecht S

26/01/2015 22:32:44
Quote Anchor link
@Ger: ik heb geprobeerd iets te doen met jouw voorstel maar dat is mij dus niet gelukt. Ik heb beetje vanalles zitten proberen maar werkte niet. Kan je mij beetje helpen?
Gewijzigd op 26/01/2015 23:04:24 door Brecht S
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

27/01/2015 11:36:47
Quote Anchor link
Ik zou niet weten hoe, 'maar werkte niet' zegt mij helemaal niets.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/01/2015 12:14:50
Quote Anchor link
Los van dit alles, het is 2015 mensen. De mysql-extensie is vanaf PHP 5.5.0 deprecated.

Wordt het niet eens tijd (en vooral wanneer je nieuwe code aan het schrijven bent) dat je gebruik gaat maken van ofwel mysqli ofwel PDO om met je MySQL-database te communiceren?

Al vanaf MySQL versie 4.1.3 (die circa 10 jaar geleden werd geintroduceerd) was het al mogelijk (en werd je aangemoedigd) om afscheid te nemen van de mysql_ functies.
 



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.