Какое событие запускается, когда текст вырезается или вставляется (или ctrl+z'd) в текстовую область?

Я использую keyup, чтобы определить, когда содержимое в текстовом поле изменяется, но каким-то образом Facebook может обнаружить событие Ctrl + X в текстовом поле сразу после нажатия «X». Что это будет за событие?


person Nick    schedule 19.12.2010    source источник
comment
Разве onchange не для этого?   -  person Gabe    schedule 19.12.2010
comment
Я могу ошибаться, но я думал, что изменение происходит только тогда, когда элемент теряет фокус.   -  person Nick    schedule 19.12.2010


Ответы (3)


Большинство современных браузеров поддерживают события cut, copy и paste. Попробуйте следующее, чтобы доказать это себе:

<textarea oncut="alert('Cut!')" rows="3" cols="40"></textarea>
person Tim Down    schedule 19.12.2010

Я предполагаю, что они делают привязку к keydown и устанавливают какую-то переменную состояния при нажатии клавиши управления, затем, когда они получают событие keyup, они проверяют переменную состояния и действуют соответственно.

person Samuel    schedule 19.12.2010
comment
Это происходит в одном из текстовых полей автоматического увеличения Facebook. По сути, размер окна изменяется сразу после нажатия CTRL и X, чтобы он соответствовал тексту, до того, как произойдет какое-либо событие нажатия клавиши. Я думал о реализации события нажатия клавиши, которое также проверяет, нажат ли CTRL, но это не принесет мне никакой пользы, потому что у меня все еще нет размера выделенного текста. - person Nick; 19.12.2010
comment
Я не знал, что вы хотите автоматически увеличивать текстовые поля, потому что ваш вопрос не имеет к этому никакого отношения;) - person Samuel; 19.12.2010
comment
Что ж, это была основная причина, однако я использовал для вырезания и вставки текстовые поля, отличные от автоматически увеличивающихся. - person Nick; 20.12.2010

Хе-хе, я сам разобрался!

В событии нажатия клавиши для текстовой области:

window.setTimeout((function(self) {
    return function() {
        console.log(self.value);
        }
    })(this), 0);

Это даст текущее значение текстовой области, а не значение до нажатия клавиши. Пока я проверял это только на Firefox 4.

Теперь мое автоматически растущее текстовое поле такое же красивое, как у Facebook!

person Nick    schedule 19.12.2010