2012-04-13 7 views
1

Ich bin neu in Jquery und Javascript-Codierung und ich habe versucht, eine Funktion schreiben, die einen Anfangswert auf einem Textfeld wiederhergestellt, wenn die Länge des Wertes kleiner als "n" ist Figuren. Es funktioniert nicht. Kannst du mir erklären, wie das geht?Wiederherstellen anfängliche Textarea Wert mit jquery wenn Wert Länge <n

Hier ist der Code:

$("textarea").focus(function() { 
    var text = $(this).val(); 
    $(this).val(''); 
    $(this).blur(function() { 
     if($(this).val().lenght<20) 
     { 
      $(this).val(text); 
     } 
    }); 
}); 

Antwort

4

Obwohl nicht sehr effizient, würde dies die Arbeit machen:

var text=''; 

$("textarea").focus(function() { 
    text = $(this).val(); 
}); 

$("textarea").blur(function() { 
    if($(this).val().length<20) 
    { 
     $(this).val(text); 
    } 
}); 
+0

Es ist verdrahtet, dass, wenn ich den Wert nicht zuerst definieren dann wird es zu undefinierten Fehler führen. Ich meine Option, die Unschärfe MUSS passiert, nachdem wir den Fokus verlassen, und dann ist der 'Text' dort definiert. –

0

Sie benötigen einen Verschluss mit einem lokalen Bereich zu erstellen und in Ihre Variable übergeben, so dass es in diesem Bereich Lokal ist:

$("textarea").focus(function() { 
    var text = $(this).val(); 
    $(this).val(''); 
    (function(initialText) { 
     $(this).blur(function() { 
      if($(this).val().length < 20) 
      { 
       $(this).val(initialText); 
      } 
     }); 
    })(text); 
}); 

Wenn Sie nicht tun Erstellen Sie einen solchen lokalen Bereich mit einer Schließung, dann Ereignishandler, die Sie an übergeben werden nicht wissen, was text ist, da es nicht im Rahmen dieser Funktion ist.

Lesen Sie mehr über js Verschlüsse, z.B. hier: http://jibbering.com/faq/notes/closures/

+0

Dies ist eigentlich nichts ändern. Die Variable 'text' ändert sich nicht innerhalb der Funktion. –

+0

@JamesMontagne Ich bin nicht wirklich sicher, was du meinst. Hast du es getestet? –

+2

Der Unschärfe-Code hat bereits Zugriff auf die Variable 'text'. Wenn Sie den Tippfehler in Länge korrigieren, "funktioniert" der ursprüngliche Code grob. –

0

Für solche Fälle können Sie die Funktion .data verwenden. Siehe unten,

$("textarea").one('focus', function() {  //will be executed once 
    $(this).data('init_val', $(this).val()); //set data with initial value 
    $(this).val('');       //clear the textarea 
}).blur(function() { 
    if($(this).val().length<20) {   //Check if entered text val is < 20 
     $(this).val($(this).data('init_val'));//If yes, update with initial val 
    } 
}); 
+0

Ich stimme zu, aber Sie müssen immer noch den "Länge" Tippfehler beheben. –

+0

@JamesMontagne Noted und behoben .. Danke –

2

lenghtlength sein sollte.

Sobald Sie das behoben haben, werden Sie feststellen, dass Sie das Ereignis blur jedes Mal neu anheften, es aber nie entfernen, was bedeutet, dass Sie Tonnen von Zuhörern haben werden. Versuchen Sie one oder eine allgemeinere blur nur einmal angebracht.