Przechwytywanie zdarzenia wklej w Javascript
Czy istnieje sposób, aby przechwycić Zdarzenie paste w JavaScript i uzyskać wartość surową, zmienić ją i ustawić skojarzoną wartość elementu DOM jako zmodyfikowaną wartość?
Na przykład, mam użytkownika próbującego skopiować i wkleić ciąg znaków ze spacjami w nim i długość ciągu przekracza maksymalną długość mojego pola tekstowego. Chcę przechwycić tekst, usunąć spacje, a następnie ustawić wartość pola tekstowego z wartością Zmień.
Czy to możliwe?
4 answers
Możesz przechwycić Zdarzenie paste, dołączając obsługę "onpaste" i uzyskać wklejony tekst za pomocą "window.clipboardData.getData('Text')
"W IE lub" event.clipboardData.getData('text/plain')
" w innych przeglądarkach.
Na przykład:
var myElement = document.getElementById('pasteElement');
myElement.onpaste = function(e) {
var pastedText = undefined;
if (window.clipboardData && window.clipboardData.getData) { // IE
pastedText = window.clipboardData.getData('Text');
} else if (e.clipboardData && e.clipboardData.getData) {
pastedText = e.clipboardData.getData('text/plain');
}
alert(pastedText); // Process and handle text...
return false; // Prevent the default handler from running.
};
Jako notatki @pimvdb, będziesz musiał użyć "e.originalEvent.clipboardData
", Jeśli używasz jQuery.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-17 18:56:33
Tak się składa, że odpowiedziałem dziś na podobne pytanie. Krótko mówiąc, potrzebujesz hakera, aby przekierować karetkę do obszaru tekstowego poza ekranem, gdy zostanie wywołane zdarzenie wklej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:48
$(document).ready(function() {
$("#editor").bind('paste', function (e){
$(e.target).keyup(getInput);
});
function getInput(e){
var inputText = $(e.target).val();
alert(inputText);
$(e.target).unbind('keyup');
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-04 07:40:11
Musiałem zaimplementować "trim" na tym, co zostało wklejone (usunąć wszystkie początkowe i końcowe białe spacje), jednocześnie zezwalając na użycie spacji.
Dla Ctrl + V, Shift + Insert i wklej prawym przyciskiem myszy, oto co znalazłem działa w FF, IE11 i Chrome od 2017-04-22:
$(document).ready(function() {
var lastKeyCode = 0;
$('input[type="text"]').bind('keydown', function(e) {
lastKeyCode = e.keyCode;
});
// Bind on the input having changed. As long as the previous character
// was not a space, BS or Del, trim the input.
$('input[type="text"]').bind('input', function(e) {
if(lastKeyCode != 32 && lastKeyCode != 8 && lastKeyCode != 46) {
$(this).val($(this).val().replace(/^\s+|\s+$/g, ''));
}
});
});
Dwa zastrzeżenia:
Jeśli podczas wklejania jest już tekst, przycinanie odbywa się na całym wyniku, a nie tylko na tym, co jest wklejane.
Jeśli użytkownik typuje spacja lub BS lub Del, a następnie pasty, przycinanie nie nastąpi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-22 17:42:26