Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11096[/thread]

jQuery: ID umbenennen (Seite 2)



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Froschpopo
 2008-01-05 12:26
#104419 #104419
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Struppi+2008-01-05 11:01:58--
wobei ich es seltsam finde eine ID umzubennen

ja, aber this gilt ja nur lokal für die Funktion! Ich brauche es aber global, damit ich in einer anderen Funktion auf die geänderte ID zugreifen kann.

ich finde es übrigens auch nicht so toll.
Schau dir mal das hier an:
Code: (dl )
1
2
3
4
5
6
<h2>Vereinsmitglied: Max Schuster</h2>
<ul>
<li id="cancel"><a href="#">Mitgliedschaft kündigen</a></li>
<li id="stop"><a href="#">Mitgliedschaft stoppen</a></li>
<li id="close"><a href="#">Mitgliedschaft sperren</a></li>
</ul>


Die einzelnen Links erzeugen einen Ajax-Request.
Jetzt will ich, dass wenn z.b. "Mitgliedschaft stoppen" gewählt wird, dieses ersetzt wird durch: "Mitgliedschaft fortsetzen".

Hier mal ohne Ajax:
Code: (dl )
1
2
3
4
5
6
7
8
9
$("stop a").click(function() {
var parent_id = this.parentNode.id;
$('#'+parent_id).html('<a href="#">Mitgliedschaft fortsetzen</a>');
});

$("start a").click(function() {
var parent_id = this.parentNode.id;
$('#'+parent_id).html('<a href="#">Mitgliedschaft stoppen</a>');
});


Verstehst du worauf ich hinaus will?
In dem Moment, wo ich den Inhalt des <li id="stop"></li> geändert habe, muss auch die ID geändert werden, damit man nämlich die Mitgliedschaft wieder starten kann!
$("#start a") fühlt sich logischerweise nicht angesprochen, weil das Listenelement noch die falsche ID (stop) hat!

Ich hab auch schon ausprobiert, den kompletten Listenblock mit remove() zu löschen und anstelle dessen mit insertBefore() einen neuen einzufügen. Aber das ließ sich ebenfalls aus einer anderen Funktion heraus nicht mehr ansprechen.
Froschpopo
 2008-01-05 12:58
#104421 #104421
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich habe hier extra für dich Struppi mal ein Beispiel gemacht, welches mein Problem auf eine andere, deutlichere Weise zeigt. Brauchst es nur zu kopieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<title>Hi</title>
<head>
<script src="/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery().ready(function() {
$("#irgendwas a").click(function() {
$("#irgendwas").html('<a href="#" id="test">Hier klicken um alert() zu erzeugen</a>');
});

$("#test").click(function() {
alert("hi");
});
});
</script>
</head>
<body>
<div id="irgendwas"><a href="#">Hier klicken</a></div>
</body>
</html>

Mein Problem ist,dass ich nicht verstehe, wieso das alert() nicht kommt!
Struppi
 2008-01-05 14:46
#104425 #104425
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Du musst den Event nicht jedesmal neu schreiben. Auch wenn sich die ID ändert bleiben die Events erhalten. D.h. du musst nur einmal die Eventhandler zuweisen und kannst dann in den Funktionen machen was du willst.

[EDIT]Und du brauchst auch keinen Link, wenn der nicht irgendwo hinführen soll, schreib einfach einen Text rein.
Froschpopo
 2008-01-05 15:18
#104426 #104426
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich habe bisher immer Parameter über Attribute (title, id, class) übergeben, weil jQuery ja nichtmehr die Einbettung von JavaScript im HTML-Code erfordert.

Ich brauche also unbedingt Parameter für den Handler!
Code: (dl )
<a href="#" onClick="irgendwas('stop', 'Kunde-29382');">Mitgliedschaft stoppen</a>


Die Überlegung war nun, wie bekomme ich die Parameter in den Handler von jQuery rüber! Und da kam ich auf die Idee, die Parameter z.B. in class,- oder id-Attributen einzubetten:

Code: (dl )
<a href="#" id="stop" class="Kunde-29382">Mitgliedschaft stoppen</a>
Froschpopo
 2008-01-05 16:08
#104427 #104427
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab jetzt ne Idee gehabt:

ich mache einfach:
Code: (dl )
1
2
3
4
5
6
<a href="#" class="parameter1 parameter2">Link</a>

...

var attribute = $("a").attr('class');
parameters = attribute.split(' ');


was hälste davon?
Struppi
 2008-01-05 16:56
#104434 #104434
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Du drehst dich im Kreis.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
<script type="text/javascript">
jQuery().ready(function() {

$("#irgendwas a").click(function() {
$("#irgendwas").html('<a href="#" id="test">Hier klicken um alert() zu erzeugen</a>');
this.id = 'was du willst';
});

$("#irgendwas a").click(function() {
alert("hi");
});
});
Struppi
 2008-01-05 16:56
#104435 #104435
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
und noch besser wäre es, wenn du anstatt über die ID über die URL den Parameter verschickst
Froschpopo
 2008-01-05 17:15
#104436 #104436
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
also du meinst dann
Code: (dl )
$(this).attr('href')

Dann muss ich die URL aber erstmal wieder decoden und dann splitten; oder gibts dafür einen Trick?
Struppi
 2008-01-05 19:11
#104438 #104438
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
oder this.href, ja du musst natürlich decoden und splitten, musst du doch sowieso wenn du die Daten übertragen willst.
Froschpopo
 2008-01-06 10:48
#104442 #104442
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab jetzt ein Plugin für jQuery runtergeladen, welches sich getUrlParam() nennt:
http://plugins.jquery.com/project/getUrlParam
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
<title>Test</title>
<head>
<script src="/js/jquery.js" type="text/javascript"></script>
<script src="/js/jquery.getUrlParam.js" type="text/javascript"></script>
<script type="text/javascript">

jQuery().ready(function() {
$("#irgendwas a").click(function() {
var test = $(this).getUrlParam('vorname');
alert(test);
return false;
});

});

</script>
</head>
<body>
<div id="irgendwas"><a href="test.pl?vorname=max&amp;nachname=mustermann">Hier klicken</a></div>
</body>
</html>


Fehlermeldung:
Code: (dl )
strHref has no properties

Ich kann mir den Fehler nicht erklären, weil das Element doch zu dem Zeitpunkt schon existiert und jQuery erst aktiv wird wenn das Dokument vollständig geladen ist!
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2008-01-04 12:27.