Hej, Hey Per! Hej, När jag skrev koden så testade jag i jsFiddle + FireFox, där fungerade det perfekt. Nu fungerar det perfekt! Tusen tack! 1) /'/g är en s.k. regex där 'g':et betyder "global" d.v.s. ersätt alla instanser av ' med ’Ersätta tangenttryckning i jQuery
Jag försöker skriva en liten snutt som automatiskt byter enkelfnutt ' mot "krullig" enkelfnutt ’.
Har försökt med kod som denna, men den fungerar inte (har bytt ut 8217 mot 65=A för att se om den ens ersätter tecknet):
$('.textbox').keypress(function(event) {
if ( event.which == 39 ) {
var e = $.Event("keydown");
e.which = 8217; // Eller 65
e.keyCode = 8217; // Eller 65
$('this').trigger(e);
}
});
Eventet anropas varje gång jag trycker på en tangent och asciikoden ser ut att vara rätt, men koden ersätter inte det inmatade tecknet. Någon som ser vad jag gör för fel? Skall det inte gå att ersätta det inmatade tecknet?
Sv: Ersätta tangenttryckning i jQuery
Jag sitter på tåget och har lite brottom, så istället för att felsöka din kod så skriver jag en lösning:
Om målet är att byta ut ' mot enkelfnutt ' mot: ’
Så borde det följande fungera:
$(document).on("keyup", ".textbox", function (e) {
if (e.keyCode === 222) {
$(".textbox").val(function(i, val) {
return val.replace(/'/g, "’");
});
}
});
Testa, och återkom gärna men flera frågor!
Mvh,
Henry Tang Kai - Frontendutvecklare - OnTrax AB
Sv: Ersätta tangenttryckning i jQuery
Följande kod fick jag nästan att fungera (notera att jag ändrade tilll "keypress" i st f "keyup") :
$(document).on("keypress", ".textbox", function (e) {
if (e.keyCode === 39) {
$(".textbox").val(function(i, val) {
return val.replace(/'/g, "’");
});
}
});
Problemet är dock att den inte ersätter första inmatatade enkelfnutten förrän man matat in en andra fnutt, då ersätts båda. Har du någon aning om vad det kan bero på? Jag är som sagt grön på jQuery så alla tips mottages med stor tacksamhet...
Sv:Ersätta tangenttryckning i jQuery
Jag provade din kod, men i FireFox så funkar det inte alls med "keypress" eller med värdet "39".
39 är ASCII koden, och 222 är keypress koden.
1. "Keydown" eventet sker när en tangent har tryckts,
2. Direkt efter det sker "keypress",
3. och till sist sker "keyup" när tangenten har släppts.
Jag testade vidare i Chrome och där fungerade din senaste kodsnitt.
Nu har jag lagt på lite så att det fungerar i både och, precis när man har tryckt:
$(document).on("keypress keyup", ".textbox", function (e) {
if (e.keyCode == 39 || 222) {
$(".textbox").val(function(i, val) {
return val.replace(/'/g, "’");
});
}
});
Kan du testa det på din miljö, och gärna flera webbläsare och återrapportera?
Mvh,
Henry Tang Kai - Frontendutvecklare - OnTrax AB
Sv: Ersätta tangenttryckning i jQuery
Jag har dock några följdfrågor :
1) Varför skriver du /'/g och inte "'" (dubbel, enkel dubbel)? Är det specialsyntax för jQuery? Båda syntaxen fungerar, är bara nyfiken...
2) Vad gör de olika "val" nedan?
$(".textbox").val(function(i, val) {
return val.replace(/'/g, "’");
});
Min gissning är att tredje "val" refererar till argumentet (andra "val"), dvs vi hade lika gärna kunnat skriva:
$(".textbox").val(function(i, text) {
return text.replace(/'/g, "’");
});
medans första "val" refererar till en jQuery-funktion? Har jag förstått koden rätt? Jag började skriva jQuery-kod för bara ca en vecka sedan, så ha tålamod med mig :-)
Vidare så är det för mig bara intressant att få det att fungera i IE, då vi talar om en Intranätapplikation som är ca 10 år gammal och vi är redan fast i IE då vi använder massor med HTC-filer av historiska skäl. Dock var ovanstående problem ett första steg i att få bort ytterligare en HTC-fil från projektet, så vem vet, en dag kanske vi kan köra det i andra browsers också. Just nu kan jag dock inte testa det i andra browsers...
Än en gång, tusen tack för hjälpen...
Sv:Ersätta tangenttryckning i jQuery
Om vi använde alternativet "'" istället för regex:en, och en användare skulle t.ex. klistra in en sträng som innehåller flertal stycken: ''''''''''''''''''''''''''
- så skulle bara det första tecknet konverteras vid nästa keystroke - och resten konverteras en och var för sig vid varje konsekventa keystroke.
Med en global regex så konverterar den alla instanser samtidigt.
Det är kanske ett sällsynt scenario men det kan vara värt att förebygga alla möjligheter.
2) - du har rätt i din gissning, du kan* ersätta val #2 och #3 mot t.ex. variabelnamnet "text".
Mvh,
Henry Tang Kai - Frontendutvecklare - OnTrax AB