2010-10-27 3 views
4

avec javascript (Jquery).Catch collé entrée dans textarea

Recherché en ligne, il semble que ce ne soit pas possible. Jusqu'à présent, j'ai quelque chose comme:

$("#textAreaId").bind('paste', function (e) { 
     alert('pasting text!!!!'); 

     var data = $("#taData").val(); 

     alert(data); 



    }); 

mais les données est vide à ce stade ... est-il un moyen de capturer l'entrée collée après qu'il a été collé? On dirait qu'il devrait y avoir un moyen.

L'événement de clé dans Jquery n'est pas déclenché lors du collage.

Des idées?

Répondre

4

Voici ce que j'ai décidé de le faire. S'il vous plaît noter que je suis simplement nécessaire pour récupérer le contenu collé.

$(document).ready(function() {   

    $("#taData").bind('paste', function (e) { 
     setTimeout(function() { DisplayPastedData(); }, 100); 
    });  

}); 



function DisplayPastedData() { 

    var data = $("#taData").val(); 
    alert('input pasted ' + data); 


} 

J'ai choisi arbitrairement 100 millisecondes d'attente, ce qui fonctionne très bien avec mon maximum de données collées.

+0

Droit ... que se passe-t-il si l'utilisateur colle du texte dans une zone de texte contenant déjà du texte? –

+0

ce n'est pas quelque chose que je suis tenu de couvrir selon mes besoins. Le collage se produira une fois, l'entrée collée sera analysée et utilisée pour peupler la table, chaque collage ultérieur remplacera le précédent. Voir ma question originale. Il n'y a rien à propos de la couverture du collage lorsque la zone de texte n'est pas vide. – sarsnake

+0

Assez juste. Dans ce cas, je suggère de vider la zone de texte après avoir obtenu les données: 'function DisplayPastedData() {var $ ta = $ (" # taData "); data = $ ta.val(); alerte ('entrée collée' + données); $ ta.val (""); } ' –

2

Tous les navigateurs ne prennent pas en charge les mêmes fonctions de copier/coller. Voici un tableau dont visionneur qui fonctionne:

http://www.quirksmode.org/dom/events/cutcopypaste.html

Si le navigateur prend en charge la capture des événements copier/coller, jQuery devrait fonctionner correctement. Je suggère de tester chacun de vos navigateurs ciblés.

Une autre approche consisterait à utiliser la propriété jQuery 'data' pour détecter que le champ de saisie a changé. Voici un article avec le code exemple:

http://www.mydogboris.com/2009/10/using-jquery-data-feature-to-detect-form-changes/

de l'article:

var formChanged = false; 

$(document).ready(function() { 
    $('#my_form input[type=text].editable, #my_form textarea.editable').each(function (i) { 
      $(this).data('initial_value', $(this).val()); 
    }); 

    $('#my_form input[type=text].editable, #my_form textarea.editable').keyup(function() { 
      if ($(this).val() != $(this).data('initial_value')) { 
       handleFormChanged(); 
      } 
    }); 

    $('#my_form .editable').bind('change paste', function() { 
      handleFormChanged(); 
    }); 

    $('.navigation_link').bind("click", function() { 
      return confirmNavigation(); 
    }); 
}); 

function handleFormChanged() { 
    $('#save_or_update').attr("disabled", false); 
    formChanged = true; 
} 

function confirmNavigation() { 
    if (formChanged) { 
      return confirm('Are you sure? Your changes will be lost!'); 
    } else { 
      return true; 
    } 
} 
+1

Capture de l'événement fonctionne, c'est le texte collé que je me demande comment obtenir. Dans IE, l'objet clipboardData peut être utilisé, mais il n'est pas disponible dans FF. Et oui, le code ci-dessus fonctionne à la fois pour IE et FF afin de capturer l'événement de collage dans PAS le problème. – sarsnake

+0

Donc en d'autres termes, la comparaison (ou la minuterie) est la seule façon d'y aller? Il n'y a pas une telle chose comme événement postpaste? – sarsnake

0

Tout à fait un ancien thread, mais vous pouvez maintenant utiliser FilteredPaste.js (http://willemmulder.github.com/FilteredPaste.js/) à la place. Il vous permettra de contrôler ce que le contenu est collé dans une zone de texte ou contenteditable et vous serez en mesure de filtrer/modifier/extraire le contenu à volonté.

Questions connexes