#javascript #jquery #fckeditor
#javascript #jquery #fckeditor
Вопрос:
у меня есть (2) текстовые области. одно из них является обычной текстовой областью, другое — ссылкой на (F) CKEditor. когда пользователь вводит (F) CKEditor, я хочу, чтобы каждое нажатие клавиши запускалось и отображалось в обычном текстовом поле. как мне это сделать?
это мой нерабочий код:
CKEDITOR.instances.ckeditor1.on('key', function (e)
{
var je = $.Event("keyup");
je.which = e.data.keyCode;
textArea.bind(je, private.bindKeyup);
textArea.trigger(je);
});
Ответ №1:
Я вижу пару причин, почему ваш пример не работает.
- Я почти уверен, что ключ добавляется в текстовую область во время события нажатия клавиши. Это может быть нажатие клавиши. Но это определенно не событие keyup.
- код ключа, который поставляется с событием ckeditor, не может быть передан прямо в текстовую область. в нем есть информация о том, нажаты ли также клавиши alt, ctrl и shift. Сначала вам нужно удалить их. (смотрите мой пример ниже, где я создаю переменную rawKey)
Вы также, вероятно, захотите удалить вызов textarea.bind() из обработчика событий. Это означает, что вы будете привязывать другую копию обработчика событий к текстовой области каждый раз, когда нажимается клавиша в ckeditor. вероятно, это не то, что вы хотите.
В любом случае, вот мой пример
function onEditorKeyEvent(event) {
var rawKey = event.data.keyCode amp; ~(CKEDITOR.SHIFT | CKEDITOR.CTRL | CKEDITOR.ALT);
var eventData =
{
altKey: !!(event.data.keyCode amp; CKEDITOR.ALT),
ctrlKey: !!(event.data.keyCode amp; CKEDITOR.CTRL),
shiftKey: !!(event.data.keyCode amp; CKEDITOR.SHIFT),
keyCode: rawKey,
which: rawKey
};
var myTextbox = $('#myTextBox');
triggerKeyEvents(eventData, myTextbox);
}
function triggerKeyEvents(eventData, elementToTriggerOn)
{
// these key events can generate an extra keyUp event for some reason if they are done in the same thread.
//so we just do them on a different thread :-)
setTimeout(this.callback(function () {
var keydownEvent = jQuery.Event('keydown', eventData);
elementToTriggerOn.trigger(keydownEvent);
if (!keydownEvent.isDefaultPrevented()) {
elementToTriggerOn.trigger(jQuery.Event('keypress', eventData));
}
elementToTriggerOn.trigger(jQuery.Event('keyup', eventData));
}), 1);
}
Ответ №2:
у меня есть код javascript для подтверждения Enter нажатия клавиши
Надеюсь, это может вам помочь
function enterKeyValidate(e)
{
var key;
if(window.event)
key = window.event.keyCode; //IE
else
key = e.which; //firefox
if(key==13)
{
alert('dont press Enter you @@@$$$#####')
return false
}
}