2010-08-25 4 views
1

Je me suis tiré les cheveux en essayant de trouver la meilleure façon de résoudre ce problème. Peut-être que quelqu'un va s'amuser avec ça.CTRL-A à l'intérieur d'un contenu div divisible dans Firefox sélectionne la div elle-même

J'ai un div avec contentEditable = "true" qui fonctionne bien pour presque tout. Une exception est dans Firefox lorsque l'utilisateur utilise CTRL-A pour tout sélectionner, puis copie/colle. L'opération select inclut les tags pour div lui-même! Autant que j'ai pu chercher, ce bug était censé être corrigé par Mozilla, mais ce n'est pas vrai. Le div juste continuellement est collé à l'intérieur de lui-même.

J'ai regardé dans l'édition du presse-papiers une fois que l'utilisateur l'a copié, mais Firefox ne semble pas trop amical vers cela à moins que vous employiez le flash, qui n'est pas très souhaitable. J'ai également pensé à attraper les balises incriminées à l'autre extrémité, lorsque l'utilisateur fait un collage, mais les événements de collage placent le texte réel dans la div après que tout gestionnaire d'événement javascript est terminé. Existe-t-il un moyen de modifier le texte à coller avant qu'il ne se produise?

+0

Vous ne savez pas si cela a fonctionné, mais vous ne pouvez pas essayer un onchange = "checkfordivs()" sur la div, dans lequel checkfordiv est une fonction JS qui est lancée après que le contenu de la div a été modifié? –

Répondre

2

En fait, il s'agit d'un problème de navigateur FireFox. Vous pouvez utiliser la fonction suivante pour résoudre le problème.

function disableCtrlKeyCombination(event){ 
    var keyCode = event.keyCode; 
    if (event.ctrlKey && keyCode==86) { //CTRL+V 
     event.preventDefault(); 
     document.getElementById("divId").textContent = system.getClipboard().getData("text"); 
     return false; 
    } else if (event.ctrlKey && keyCode==67) { //CTRL+C (Copy) 
     event.preventDefault(); 
     system.getClipboard().setData("text",document.getElementById("divId").textContent); 
     return false; 
    } else { 
     return true; 
    } 
} 

Remarque: Cela ne fonctionnera que dans Firefox. Dans d'autres navigateurs, cela fonctionne bien par défaut.