2009-10-14 8 views
1

J'ai une applet Java sur la page web qui permet d'éditer du texte. Lorsque l'utilisateur essaie de modifier le texte, en appuyant sur le bouton retour arrière, le navigateur redirige vers la page précédente. Si le retour arrière du filtre appuie commeTransmettre l'événement de touche enfoncée à l'applet et l'arrêter propagation

var a = function() { 
     var event = window.event; 
     if (event.keyCode == 8){ 
      alert('backspace'); 
      return false; 
     } 
} 
document.onkeydown = a; 

alors le retour arrière ne se propagera pas à l'applet, ne modifiant donc pas le texte. La question est comment passer l'événement à l'applet et arrêter de se propager davantage?

+0

Il vous manque une fermeture '}' sur votre fonction. Faute de frappe? –

+0

merci, corrigé – kilonet

Répondre

1

Pour l'instant je trouve une solution dans l'utilisation jQuery sendkeys plugin. Comme utiliser jQuery dans notre projet n'est pas une option, je vais essayer de le réécrire en javascript.

+0

Je me demande quelle méthode utilise sendkeys ... – Kev

+1

Il utilise des manipulations sophistiquées avec textarea caché pour simuler la touche – kilonet

+0

Wow, d'accord, eh bien, je suis content que vous l'ayez compris ... IE m'a vraiment frustré parfois ... – Kev

0
if (event.keyCode === 8) 
{ 
    var newEvent = document.createEvent('KeyboardEvent'); 
    newEvent.initKeyEvent(                      
       "keypress",  // in DOMString typeArg,               
        true,    // in boolean canBubbleArg,               
        true,    // in boolean cancelableArg,              
        null,    // in nsIDOMAbstractView viewArg, Specifies UIEvent.view. This value may be null.  
        false,   // in boolean ctrlKeyArg,                
        false,   // in boolean altKeyArg,               
        false,   // in boolean shiftKeyArg,              
        false,   // in boolean metaKeyArg,              
        8,    // in unsigned long keyCodeArg,              
        0);    // in unsigned long charCodeArg); 
    document.getElementById('myjavaapplet').dispatchEvent(newEvent); 
} 
+0

Notez que iniKeyEvent est "spécifique à Gecko, le projet de travail DOM 3 Events utilise à la place initKeyboardEvent" (https://developer.mozilla.org/en/DOM/document.createEvent) – Kev

+0

Je programme pour IE . L'objet Event renvoyé par document.createEventObject ne possède pas la méthode 'initKeyboardEvent' – kilonet

0
if (event.keyCode === 8) 
{ 
    var newEvent = document.createEvent('UIEvents'); 
    newEvent.initUIEvent('keypress', true, true, window, 1); 
    newEvent.keyCode = 8; 
    document.getElementById('myjavaapplet').dispatchEvent(newEvent); 
} 
+0

selon IE8 L'objet événement de débogage JS possède uniquement les méthodes suivantes: getAttribute, setAttribute et removeAttribute. J'ai essayé de définir les attributs listés dans initUIEvent mais ça n'a pas fonctionné ( – kilonet

+0

Oh, wow, tellement pour les standards – Kev

0
// assumes IE8, but you could write detection code based on if (document.createEventObject) 

if (event.keyCode === 8) 
{ 
    var newEvent = document.createEventObject(); 
    newEvent.keyCode = 8; 
    document.getElementById('myjavaapplet').fireEvent('onkeypress',newEvent); 
} 
+0

J'ai déjà essayé ça - ça n'a pas fonctionné aussi – kilonet

+0

Est-ce que ça a été une erreur ou pas? – Kev

+0

ne fais rien – kilonet

Questions connexes