[jquery] td toggelen werkt niet
HTML:
script.js:
De foutmelding van de errorconsole zegt:
toon_opmerking is not defined
En ja, jQuery wordt geladen. De functie bestaat..
Waar slaat dit dan op?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<tr>
<td><a href="/spots/4007">4007</a></td>
<td><a onclick="toon_opmerking('4007');" class="OpmToggle4007" href="javascript:void(0)">Klik</a></td>
</tr>
<tr class="opm4007" style="display:none">
<td colspan="6"><b>Opmerking:</b> Prototype modernisering driedelige treinstellen.</td>
</tr>
<td><a href="/spots/4007">4007</a></td>
<td><a onclick="toon_opmerking('4007');" class="OpmToggle4007" href="javascript:void(0)">Klik</a></td>
</tr>
<tr class="opm4007" style="display:none">
<td colspan="6"><b>Opmerking:</b> Prototype modernisering driedelige treinstellen.</td>
</tr>
script.js:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
function toon_opmerking(nummer) {
$(document).ready(function(){
$(.OpmToggle).click(function() {
$('.opm'+nummer).toggle();
});
});
}
$(document).ready(function(){
$(.OpmToggle).click(function() {
$('.opm'+nummer).toggle();
});
});
}
De foutmelding van de errorconsole zegt:
toon_opmerking is not defined
En ja, jQuery wordt geladen. De functie bestaat..
Waar slaat dit dan op?
Gewijzigd op 29/05/2011 21:10:19 door - Aar -
Gesponsorde koppelingen:
waarom gebruik je onclick terwijl je ook een click functie in jquery hebt? Ik vin het persoonlijk lekkerder werken om dat allemaal met js af te werken ipv onclick in html
Hoe kan ik het anders afhandelen?
Die HTML herhaalt zich meerdere keren, dus hij moet wel de juiste opmerking togglen. Dus leek een functie mij voor de hand liggend.
Die HTML herhaalt zich meerdere keren, dus hij moet wel de juiste opmerking togglen. Dus leek een functie mij voor de hand liggend.
Gewijzigd op 29/05/2011 21:22:40 door - Aar -
In jQuery heb je ook de keyword 'this'.
Stel je tabel heeft als ID 'toggletabel':
Echter durf ik zo niet te zeggen hoe het gaat reageren met een TD.
Onclick events instellen in je HTML is compleet overbodig. Als je een event het op een object, dan staat 'this' voor het element waar het event door getriggered is.
Als je 100 TD's hebt en je drukt op een enkele TD, dan staat 'this' voor de exacte TD waar je op gedrukt hebt.
Stel je tabel heeft als ID 'toggletabel':
Code (php)
1
2
3
4
5
2
3
4
5
$(document).ready(function() {
$('#toggletabel td').click(function() {
$(this).toggle();
});
});
$('#toggletabel td').click(function() {
$(this).toggle();
});
});
Echter durf ik zo niet te zeggen hoe het gaat reageren met een TD.
Onclick events instellen in je HTML is compleet overbodig. Als je een event het op een object, dan staat 'this' voor het element waar het event door getriggered is.
Als je 100 TD's hebt en je drukt op een enkele TD, dan staat 'this' voor de exacte TD waar je op gedrukt hebt.
Gewijzigd op 29/05/2011 21:32:07 door Erik van de Locht
Ik weet dat tr's goed werken met toggle, td's weet ik zo niet
Maar het is niet dezelfde TR
Kijk maar eens goed in mijn HTML voorbeeld.
Dus die 'this' gaat niet werken.
Kijk maar eens goed in mijn HTML voorbeeld.
Dus die 'this' gaat niet werken.
@Aar, de code van jou zou sowieso niet werken.
Zodra je op de td klikt voert hij deze code uit:
Maar dit is al een goede code opzich. Alleen deze code volstaat al, want met $(document).ready() kijk je of de DOM klaar is. Vervolgens selecteer je .OpmToggle (moet trouwens wel tussen quotes). Dan zeg je als er op dit geklikt wordt, voer deze functie uit. En die functie is dat .opm+nummer getoggled wordt, dit is trouwens een anchor (link) niet de td.
Je kan inderdaad veel beter gebruik maken van this, daarmee pak je het element dat geselecteerd wordt. In de code die jij gebruikt zal de juiste code dit zijn:
Zodra je op de td klikt voert hij deze code uit:
Code (php)
1
2
3
4
5
2
3
4
5
$(document).ready(function(){
$(.OpmToggle).click(function() {
$('.opm'+nummer).toggle();
});
});
$(.OpmToggle).click(function() {
$('.opm'+nummer).toggle();
});
});
Maar dit is al een goede code opzich. Alleen deze code volstaat al, want met $(document).ready() kijk je of de DOM klaar is. Vervolgens selecteer je .OpmToggle (moet trouwens wel tussen quotes). Dan zeg je als er op dit geklikt wordt, voer deze functie uit. En die functie is dat .opm+nummer getoggled wordt, dit is trouwens een anchor (link) niet de td.
Je kan inderdaad veel beter gebruik maken van this, daarmee pak je het element dat geselecteerd wordt. In de code die jij gebruikt zal de juiste code dit zijn:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<tr>
<td><a href="/spots/4007">4007</a></td>
<td><a class="OpmToggle4007" href="javascript:void(0)">Klik</a></td>
</tr>
<tr class="opm4007" style="display:none">
<td colspan="6"><b>Opmerking:</b> Prototype modernisering driedelige treinstellen.</td>
</tr>
<script type="text/javascript">
$(function() { // Verkorting van $(document).ready(
// Selecteer elke td en zodra er op geklikt wordt
$('td').click(function() {
// Laat je dat element togglen
$('this').toggle();
});
});
</script>
<td><a href="/spots/4007">4007</a></td>
<td><a class="OpmToggle4007" href="javascript:void(0)">Klik</a></td>
</tr>
<tr class="opm4007" style="display:none">
<td colspan="6"><b>Opmerking:</b> Prototype modernisering driedelige treinstellen.</td>
</tr>
<script type="text/javascript">
$(function() { // Verkorting van $(document).ready(
// Selecteer elke td en zodra er op geklikt wordt
$('td').click(function() {
// Laat je dat element togglen
$('this').toggle();
});
});
</script>
Quote:
Je kan inderdaad veel beter gebruik maken van this, daarmee pak je het element dat geselecteerd wordt. In de code die jij gebruikt zal de juiste code dit zijn:
Lees je wel? Er zijn twee TR's, eentje met de knop, en eentje met de opmerking....
Ik zie het nu inderdaad ook, dan zal je het makkelijkst de class op kunnen halen van de anchor en dan een td zoeken met dezelfde class:
Of gebruik maken van de jQuery functie next():
Maar wat jij wilt, kan je dat niet veel beter met de HTML tags dl, dd en dt oplossen? (link).
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$(function() {
$('a').click(function() {
var anchorClass = $(this).attr('class');
$('td.'+anchorClass).toggle();
});
});
$('a').click(function() {
var anchorClass = $(this).attr('class');
$('td.'+anchorClass).toggle();
});
});
Of gebruik maken van de jQuery functie next():
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$(function() {
$('a').click(function() {
$(this).next('tr').children('td').toggle();
});
});
$('a').click(function() {
$(this).next('tr').children('td').toggle();
});
});
Maar wat jij wilt, kan je dat niet veel beter met de HTML tags dl, dd en dt oplossen? (link).
Ik was ook net naar zoiets aan het kijken!
Leuk.
Next was ik ook even vergeten, maar dan kan het zelfs super simpel:
(mijn clickable tr heb ik class row meegegeven)
Leuk.
Next was ik ook even vergeten, maar dan kan het zelfs super simpel:
(mijn clickable tr heb ik class row meegegeven)
Gewijzigd op 29/05/2011 23:41:58 door - Roland -
Ik heb het laatste idee geprobeerd, maar dit werkt niet.
En ook dit niet:
d.m.v. console.log() weet ik wel dat het hierin zit.
Hij pakt toch echt de volgende tr, die heeft de "display:none" stijl.
Maar er gebeurt wederom niks.
En ook dit niet:
d.m.v. console.log() weet ik wel dat het hierin zit.
Hij pakt toch echt de volgende tr, die heeft de "display:none" stijl.
Maar er gebeurt wederom niks.
Ik heb mn tabel zo (iets anders?)opgebouwd
dan werkt ie
<table width="200" border="1">
<tr class="row" >
<td>Aap</td>
<td> </td>
</tr>
<tr style="display:none">
<td>opmerking</td>
<td> </td>
</tr>
<tr class="row" >
<td>Mies</td>
<td> </td>
</tr>
<tr style="display:none">
<td>opmerking</td>
<td> </td>
</tr>
</table>
oja, ik had 2 kolommen, maar dat is niet van belang...
dan werkt ie
<table width="200" border="1">
<tr class="row" >
<td>Aap</td>
<td> </td>
</tr>
<tr style="display:none">
<td>opmerking</td>
<td> </td>
</tr>
<tr class="row" >
<td>Mies</td>
<td> </td>
</tr>
<tr style="display:none">
<td>opmerking</td>
<td> </td>
</tr>
</table>
oja, ik had 2 kolommen, maar dat is niet van belang...
Gewijzigd op 29/05/2011 23:59:30 door - Roland -
probeer de <td> met de link eens een id geven, het .click event bind je dan aan de class van de link, en dan kun je de opmerking opmaken met het id van de <td>.
Zoiets:
Zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<tr>
<td><a href="/spots/4007">4007</a></td>
<td id="4007"><a class="click" href="#">Klik</a></td>
</tr>
<tr class="opm4007" style="display:none">
<td colspan="6"><b>Opmerking:</b> Prototype modernisering driedelige treinstellen.</td>
</tr>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.click').click(function() {
var id = $(this).attr('id');
$('.opm'+id).toggle();
return false;
});
});
</script>
<td><a href="/spots/4007">4007</a></td>
<td id="4007"><a class="click" href="#">Klik</a></td>
</tr>
<tr class="opm4007" style="display:none">
<td colspan="6"><b>Opmerking:</b> Prototype modernisering driedelige treinstellen.</td>
</tr>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('.click').click(function() {
var id = $(this).attr('id');
$('.opm'+id).toggle();
return false;
});
});
</script>
Gewijzigd op 30/05/2011 00:01:46 door Tim S
Niet te moeilijk doen. Geef alle links de class opmtoggle mee en je bent met onderstaand script klaar:
(Op mn mobiel getypt dus de opmaak is niet geweldig)
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$(function(){
$('a.opmtoggle').click(function(){
$(this).parents('tr').next().toggle();
return false;
});
});
$('a.opmtoggle').click(function(){
$(this).parents('tr').next().toggle();
return false;
});
});
(Op mn mobiel getypt dus de opmaak is niet geweldig)
Gewijzigd op 30/05/2011 12:16:09 door Arjan -
Ondanks je de moeite nam om het op je telefoon in te typen was dit wel de juiste oplossing. ;-)
Thnx...
Thnx...
Het was een kleine moeite hoor :), alleen de opmaak is wat ingewikkelder op zo'n klein schermpie.
Maar mooi dat het nu werkt!
Maar mooi dat het nu werkt!



