Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

jQuery vs. Callback

Diskussion: jQuery vs. Callback im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Huhu Könnte mir jemand erläutern, warum bei .load() der Responsetext ohne DOM-Kontext daherkommt? Ein kleines Beispiel: Code: <!DOCTYPE html ...

Antwort
Alt 16.03.11, 13:20   #1 (permalink)
 
Benutzerbild von she3p
 
Registriert seit: 07.05.07
she3p Leistung: 8086
Likes: 19
Standard jQuery vs. Callback

Anzeige

Huhu

Könnte mir jemand erläutern, warum bei .load() der Responsetext ohne DOM-Kontext daherkommt? Ein kleines Beispiel:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>jQuery Tester</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
    <script type="text/javascript">
    
    $(document).ready(function()
    {
        $.ajaxSetup(
        {
            // Disable caching of AJAX responses
            cache: false
        });

        $('div#main').load('load.php', function(r, s, x)
        {
            var me = $(this);
            
            // this
            me.find('input.term').attr('value', 'via this');
            
            console.log('~this');
            console.log(me.find('input.term'));
            console.log(me.find('input.term').context);
            
            // response
            $(r).find('input.term').each(function(i, e)
            {
                $(e).attr('value', 'via response');
                
                console.log('~response');
                console.log($(e));
                console.log($(e).context);
            });
        });    
    });
    
    </script>
</head>
<body>

<div id="main"></div>

</body>
</html>
So nun. Sobald der DOM ready ist, lade ich per AJAX Request das Dokument load.php in meinen div#main.
load.php gibt mir ein Formular zurück, in welchem ich ein input-feld mit der Klasse .term gesetzt habe. Ich würde dieses Formular nach dem Request gerne noch ein wenig verändern (per jQuery), namentlich einen autocomplete initialisieren.
Natürlich könnte ich auch per .live() einen Event auf diese noch nicht vorhandenen Elemente initialisieren, das ist allerdings nicht Gegenstand meiner Frage

Nun, wieso macht es Sinn, das in einer Callbackfunktion von .load() der Parameter response nicht das eigentliche DOM-Objekt ist, welches dem div#main hinzugefügt wurde, sondern nur ein Text, der sich selbst als Kontext hat?
Angehängte Grafiken
Dateityp: png Screenshot-4.png (25,1 KB, 5x aufgerufen)
she3p ist offline   Mit Zitat antworten
Alt 16.03.11, 14:58   #2 (permalink)
Themenstarter
 
Benutzerbild von she3p
 
Registriert seit: 07.05.07
she3p Leistung: 8086
Likes: 19
Standard

Hopla, kleineres Maleur. Richtig müsste das Beispiel wie folgt aussehen:

bsp   
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>jQuery Tester</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
    <script type="text/javascript">
    
    $(document).ready(function()
    {
        $.ajaxSetup(
        {
            // Disable caching of AJAX responses
            cache: false
        });

        $('div#main').load('load.php', function(r, s, x)
        {
            var me = $(this);
            
            // this
            me.find('input.term').each(function(i, e)
            {
                $(e).attr('value', 'via this');
            
                console.log('~this');
                console.log($(e));
                console.log($(e).context);
            });
            
            // response
            $(r).find('input.term').each(function(i, e)
            {
                $(e).attr('value', 'via response');
                
                console.log('~response');
                console.log($(e));
                console.log($(e).context);
            });
        });    
    });
    
    </script>
</head>
<body>

<div id="main"></div>

</body>
</html>


Der Kontext ist nun bei beiden Objekten derselbe. Das heisst, es kann wohl nicht daran liegen. Die Frage allerdings bleibt. (Wenn auch ein wenig abgeändert.)
Wie lässt sich eine Callbackfunktion rechtfertigen, die als Response eine Kopie (ausserhalb des DOMs) liefert, die nichts (aber auch gar nichts) bringt?
she3p ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » jQuery vs. Callback
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61