2012-08-27 11 views
13

Sé que podemos utilizar evento paste se unen a continuación:invocar una función después haga clic derecho en la pasta de jQuery

$('#id').bind('paste', function(e) { 
    alert('pasting!') 
}); 

Pero el problema es, que va a llamar antes de la pasta de texto pegado. Quiero que se active una función después del haga clic derecho -> pegue el texto pegado en el campo de entrada, para que pueda acceder al valor pegado dentro de la función del controlador de eventos.

.change() evento también no ayuda. Actualmente utilizo el evento .keyup(), porque necesito mostrar el resto de los caracteres mientras escribo en ese campo de entrada.

+1

¿Qué pasa con el oyente de eventos HTML5 'oninput'? –

Respuesta

23

especie de truco, pero:

$("#id").bind('paste', function(e) { 
     var ctl = $(this); 
     setTimeout(function() { 
      //Do whatever you want to $(ctl) here.... 
     }, 100); 
}); 
+0

Esta fue mi intuición, también. –

0

que tenían el mismo problema, que optó por realizar movimientos de pasta a través de Javascript y el uso que de salida en lugar:

var getPostPasteText = function (element, pastedData) { 
    // get the highlighted text (if any) from the element 
    var selection = getSelection(element); 
    var selectionStart = selection.start; 
    var selectionEnd = selection.end; 

    // figure out what text is to the left and right of the highlighted text (if any) 
    var oldText = $(element).val(); 
    var leftPiece = oldText.substr(0, selectionStart); 
    var rightPiece = oldText.substr(selectionEnd, oldText.length); 

    // compute what the new value of the element will be after the paste 
    // note behavior of paste is to REPLACE any highlighted text 
    return leftPiece + pastedData + rightPiece; 
}; 

Ver IE's document.selection.createRange doesn't include leading or trailing blank lines para la fuente de la función getSelection.

3

Esto detendrá el usuario desde cualquier pegar, hacer frente o el corte con el teclado:

$("#myField").keydown(function(event) { 
    var forbiddenKeys = new Array('c', 'x', 'v'); 
    var keyCode = (event.keyCode) ? event.keyCode : event.which; 
    var isCtrl; 
    isCtrl = event.ctrlKey 

    if (isCtrl) { 
     for (i = 0; i < forbiddenKeys.length; i++) { 
      if (forbiddenKeys[i] == String.fromCharCode(keyCode).toLowerCase()) { 
      return false; 
     } 
    } 
} 
return true; 
}); 

Ésta va a hacer lo mismo para los eventos de ratón:

$("#myField").bind("cut copy paste",function(event) { 
    event.preventDefault(); 
}); 

A pesar de que la anterior se no evite los clics con el botón derecho, el usuario no podrá pegar, cortar o copiar desde ese campo.

para usarlo después del evento, al igual que se ha preguntado en su pregunta, debe utilizar JavaScript Timing Event

setTimeout(function() { 
    // your code goes here 
}, 10); 
13

Por qué no utilizar el evento "entrada"?

$("#id").bind('input', function(e) { 
    var $this = $(this); 
    console.log($this.val()); 
}); 
+1

nunca supe que hubo un evento llamado 'input': D, esta debería ser la respuesta actual en lugar de la respuesta' timeout' – Exlord

+0

great answer. ¡Gracias! –

+0

¡vota tu voto! Esta debería ser la respuesta aceptada. El evento de entrada ocurre después de que se ha completado el pegado, después de que se hayan agregado los caracteres a la entrada. En línea, puede hacer esto DiscipleMichael

Cuestiones relacionadas