2010-06-28 11 views
2

J'ai ce code:jQuery KeyPress limitant mon entrée sur TextArea

$('#typer').keypress(function(e){ 

      var code = (e.keyCode ? e.keyCode : e.which); 

      if (code == '13') { 
       $.sound.play("cr.wav",{timeout:1000}); 
      } else if (code == '8') { 
       $.sound.play("del.wav",{timeout:1000}); 
      } else if (code == '27') { 
       $.sound.play("asswipe.wav",{timeout:1000}); 
      } else { 
       $.sound.play("key.wav",{timeout:1000}); 
      } 
     }); 

Maintenant, pour une raison quelconque - je ne peux pas taper un caractère dans cette case. Le son joue une fois, puis plus rien.

Cela fonctionne très bien dans IE ... Juste FireFox ...

lien Plugin: http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/sound/jquery.sound.js?r=5750

Quelqu'un at-il déjà utilisé ce plugin ....?

+3

2 choses: 1) il suffit d'utiliser 'e.which', [jQuery normalise déjà] (http://github.com/jquery/jquery/blob/master/src/event.js#L468), pas besoin de vérifier les deux. 2) Quel plugin utilisez-vous pour le son? Le problème est dans ce code. –

+0

Voulez-vous dire que la boîte perd le focus après avoir tapé le premier caractère, ou que la boîte vous limite à un seul caractère? Je risque de deviner que votre plugin '$ .sound' est en train de se concentrer et de le donner à tout ce qui joue le son. –

+0

@Nick Craver - J'utilise le plugin de son jQuery (pas de flash), en utilisant la fonction '$ .sound.play' –

Répondre

2

D'abord, e.which est un nombre, pas une chaîne, vous devez donc perdre les guillemets simples: utiliser code == 13, non code == '13'. Vous pourriez être mieux servi par une déclaration de commutateur (bien que ce soit juste une question de préférence). Deuxièmement, je ne pense pas que le problème soit lié au plugin. Sans utiliser le plug-in, ce qui a le même problème:

$('#typer').keypress(function(e) { 
    var snd = $('<embed hidden="true" loop="false" src="key.wav" autostart="true" height="0" />'); 
    snd.appendTo("body"); 
    setTimeout(function() { snd.remove(); }, 1000); 
}); 

Il semble que FF et Chrome ne traitent pas bien avec les ayant <embed> balises ajoutées dynamiquement. Vous voudrez peut-être chercher un autre plugin, celui qui n'utilise pas le tag. Je ne suis pas un fan de flash, mais il y a probablement des plugins qui l'utilisent, et qui fonctionnent bien.

+0

Bravo, malheureusement vous avez raison :(- merci –

0

Peut-être essayer le clavier au lieu de la touche? J'ai eu beaucoup de problèmes en utilisant keypress travaillant sur un projet de mouvement de personnage d'image-objet RPG avec des numéros ne correspondant pas à la clé attendue et juste abandonné complètement en faveur de keydown.

Si cela ne fonctionne pas, je peux envisager de répliquer votre environnement.

Edit: Cela semble fonctionner pour moi (Chrome & Firefox 3.6): http://resopollution.com/experiments/sound/sound.html

J'ai remarqué UNE FOIS que la page ouvre simplement le fichier audio (semble voiturette), mais ne peut pas réplique-le. Peut-être que c'est ce que vous vivez ... Cela fonctionne bien maintenant pour moi.

Si vous rencontrez toujours des problèmes ...

Alternative 1 Vous pouvez être en mesure de changer l'étiquette invisible (dans le plug-in) à un invisible que les liens vers une page qui a votre fichier wav avec AutoPlay sur et pas de boucle.

Alternative 2 Utilisez une option html5/flash. http://www.schillmania.com/projects/soundmanager2/

+0

J'ai peur que j'ai déjà essayé, j'ai aussi essayé keyup et tous les autres petits morceaux n pièces, il a juste moi confus :( –

+0

Je l'ai testé et mis à jour ma réponse.S'il vous plaît laissez-moi savoir si le lien que j'ai fourni fonctionne pour vous – resopollution

+0

Hey, merci d'avoir essayé, le code que vous avez fourni fonctionne très bien dans IE, mais avec Firefox 3.6.6 il fait la connexion http pour télécharger le wav mais aucun son ne joue du tout :(je n'aurai pas de cheveux à la fin de ce projet !! lol –

0
// play a sound from the url, on a track, stopping any sound already running on that track 
    $.sound.play(url, { 
    track: "track1" 
    }); 

Ci-dessus se trouve la documentation du plugin que vous utilisez. Avez-vous essayé de jouer chaque son sur une nouvelle piste?

Je créerais un nouveau nom pour chaque piste sur chaque fonction de touche et affecterais le son src à cette nouvelle piste.

+0

(en pensant le long des lignes du son superposition en flash) – bcm

+0

Merci, cela ressemble à la bonne façon de le faire (sans être dit d'utiliser le flash par tout le monde :). J'ai maintenant la ligne: '$ .sound.play (" del.wav ", {track:" track2 ", timeout: 1000});' mais il est dit que la syntaxe est légèrement b0rked :( –

+0

Je viens de tester ceci: $ (function() {$ .sound.play ("catpurr2.wav", {track: "track2", timeout: 1000}); sans erreur Avez-vous chargé la bibliothèque jQuery avant le plugin? Et pour le problème de syntaxe, sera utile si vous savez exactement d'où il vient.Utiliser quelque chose comme IE débogueur de barre d'outils de développement sera utile pour le débogage de script - F12 sur IE. – bcm

Questions connexes