2010-09-03 4 views
2

Можно ли перехватить и изменить текст, который вставляется в текстовое поле?Как изменить вложенный текст?

Если перехват невозможно, можно ли изменить его после вставки? (Без изменения уже существующий текст в текстовое поле.)

+0

Вы используете любую библиотеку JavaScript (например, JQuery)? –

+1

@Adrian: Мой вопрос больше о том, возможно ли это, поэтому вы можете взять любую библиотеку, которую хотите. –

ответ

3

С JQuery:

jQuery(function($){ 
     $('#your_element').bind('paste', function(event){ 
     event.preventDefault(); 
     var clipboardData = event.originalEvent.clipboardData.getData('text/plain'); 
     console.log(clipboardData); 
     }); 
    }  
    }); 

Работает в IE и Webkit. В Firefox вы могли бы использовать это:

http://intridea.com/2007/12/16/faking-onpaste-in-firefox?blog=company

+0

На самом деле событие onpaste работало в Gecko 1.9.0.19 (Camino 2.0.4). Я думаю, что он был введен в Firefox 3, вот страница mozilla: https://developer.mozilla.org/en/DOM/element.onpaste. Однако нет хорошего способа получить вставленные данные. –

+0

Ага, спасибо, не знаю, что Firefox 3 реализована на вставке, но это отстой, что вы не можете добраться до данных с ним. – Carlos

+6

А где информация о ** modyfing ** данные? – Mike

1

Может перехватывать keypress эс, чтобы знать, когда CTRL + C нажимается, кэш текущий текст, а затем в CTRL + C «s keyup , проверьте текущее значение в кэше, с простой обработкой текста вы можете узнать новый текст и делать все, что хотите, и соответственно обновлять.

+0

Я не уверен, что это работает со всеми браузерами, но, безусловно, это лучший подход. http://api.jquery.com/keypress/ – userx

0

Лучший способ, которым я знаю, как это сделать, - дождаться, пока содержимое в текстовое поле будет вставлено, а затем дождитесь активации ключа или триггера запуска. Это показано в приведенном ниже коде:

<script language="javascript"> 

function testfunction() 
{ 

// This function will execute whenever the content of 

} 
</script> 

<textarea onkeyup="testfunction()" onkeydown="testfunction()"></textarea> 

Если вы хотите, чтобы контролировать текстовое поле для каких-либо изменений, следующий код будет делать это. Он проверяет значение текстового поля каждые 1/10 секунды для любых обновлений.

<textarea id="testfield"></textarea> 

<script language="javascript"> 

var textarea = document.getElementById('testfield'); 
var textval = ''; 

function monitor() 
{ 

if(textval != textarea.value) 
{ 

    textval = textarea.value; 
    testfunction(); 

} 

setTimeout('monitor()', 100); 

} 

function testfunction() 
{ 

// This function will get executed whenever the value of the text area is altered (at most within 1/10th of a second) 

} 

monitor(); 
</script> 

В обоих случаях, вы можете изменить значение текстового поля, когда функции теста(), а затем обновить значение текстового поля с обновленным значением.

+2

Рассмотрите возможность использования «setTimeout (monitor, 100);» вместо "setTimeout ('monitor()', 100);". Eval is evil :) – userx

Смежные вопросы