Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Jquery/js] Data van een span halen als user stopt met typen

Pagina: 1
Acties:

  • Beatboxx
  • Registratie: April 2010
  • Laatst online: 26-10-2022

Beatboxx

Certified n00b

Topicstarter
Ik ben bezig met een formulier dat met Ajax moet worden verstuurd. De bedoeling is dat data in dit formulier automagisch worden opgeslagen, dus niet alleen via de save-knop, maar ook als een user stopt met typen. Hiervoor heb ik deze js geschreven:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        $('#tester').bind('dblclick',
        function(){
            $(this).attr('contentEditable',true).addClass('editable');
        }); //Make it possible to edit the content of a span when it is double clicked

        //setup before functions
            var typingTimer;                //timer identifier
            var doneTypingInterval = 2000;  //time in ms, ie 2 secs
            
            //on keyup, start the countdown
            $('.editable').keyup(function(){
                clearTimeout(typingTimer);
                if ($('.editable').val) {
                    typingTimer = setTimeout(doneTyping, doneTypingInterval);
                }
            });
        
        //user is "finished typing," do something
        function doneTyping () {
            var x = $(".editable").html();
            var x = x.replace(/(<([^>]+)>)/ig,""); //Remove html shizzle
            console.log(x);     
        }


Probleem; er gebeurt helemaal niks. Er zal vast ergens een miniscuul (of iets groter) foutje zitten, maar zou iemand even kunnen kijken, want ik kom er echt niet uit.... |:(
Jsfiddle: http://jsfiddle.net/AyQMy/

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Je doet op regel 3: '.addClass('editable');' nadat iemand 'double click' heeft gedaan op je span.

maar op regel 11 heb je al "$('.editable')" met keyup event.

Die class bestaat niet voordat iemand 'double click' heeft gedaan op je span (dus er is geen keyup even aan iets gekoppeld).

http://xyproblem.info/


  • Beatboxx
  • Registratie: April 2010
  • Laatst online: 26-10-2022

Beatboxx

Certified n00b

Topicstarter
Klopt, maar dat maakt toch niet uit? Die data is toch pas relevant wanneer contenteditable aanstaat?

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Op regel 11 gebruik je $('.editable'), dit haalt alle elementen in je DOM op met de class editable. Zodra je javascript geladen wordt zijn dat 0 elementen.

Als je daarna dynamisch elementen maakt met deze class maakt dan niet uit omdat regel 11 allang is uitgevoerd (en niet meer wordt aangeroepen).

volgens mij denk je dat je met "$('.editable').keyup" ervoor zorgt dat als er een element deze class krijg dat je javascript functie automagisch gekoppeld wordt aan dat element. Dat is niet hoe JS werkt.

http://xyproblem.info/


  • Beatboxx
  • Registratie: April 2010
  • Laatst online: 26-10-2022

Beatboxx

Certified n00b

Topicstarter
Ik moet inderdaad nog veel leren... Hij werkt nu, voor de geinteresseerden, check hier!

http://jsfiddle.net/AyQMy/1/

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 01-11 21:54
Beatboxx schreef op woensdag 27 februari 2013 @ 21:15:
Ik moet inderdaad nog veel leren... Hij werkt nu, voor de geinteresseerden, check hier!

http://jsfiddle.net/AyQMy/1/
Het is nog niet af, telkens als je nu dubbelklikt wordt het keyup - event opnieuw! gebind aan die elementen die worden gevonden door de selector .editable. Tenzij je nu van plan bent het weer te unbinden nadat je klaar bent, kan ik je aanraden http://api.jquery.com/on/ eens te bekijken.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

DanielG schreef op woensdag 27 februari 2013 @ 21:10:

volgens mij denk je dat je met "$('.editable').keyup" ervoor zorgt dat als er een element deze class krijg dat je javascript functie automagisch gekoppeld wordt aan dat element. Dat is niet hoe JS werkt.
Wel als je event delegation gebruikt.

JavaScript:
1
$('.container').on('keyup', '.editable', function(){ /* ... */ });


Weet niet hoe je html structuur er uit ziet, maar je delegeert events hiermee naar .container (een parent). En ongeacht of ze later toegevoegd zijn zullen events op .editable dus afgehandeld worden.
Pagina: 1