Текущий комментарий коробки не традиционный <textarea>
внутри <form>
. Они используют атрибут contenteditable в div. Для того, чтобы представить в этом случае, вы хотите, чтобы слушать одного из событий клавиатуры (keydown
, keypress
, keyup
) и искать Enter
ключ, который скан 13.
Похоже FB слушает keydown
ЭВТ в этом случае, поэтому, когда я запустил этот код, я был в состоянии подделать оставить свой комментарий:
function fireEvent(type, element) {
var evt;
if(document.createEvent) {
evt = document.createEvent("HTMLEvents");
evt.initEvent(type, true, true);
} else {
evt = document.createEventObject();
evt.eventType = type;
}
evt.eventName = type;
evt.keyCode = 13;
evt.which = 13;
if(document.createEvent) {
element.dispatchEvent(evt);
} else {
element.fireEvent("on" + evt.eventType, evt);
}
}
fireEvent('keydown', document.querySelector('[role="combobox"]._54-z span span'));
несколько вещей, чтобы заметить об этом. Класс ._54-z
был классом, который они только что использовали на моей странице. Ваш пробег может отличаться. Используйте инструменты dev, чтобы убедиться, что вы захватили правый элемент (он должен иметь роль aria «combobox»). Кроме того, если вы ищете поддержку старых браузеров, вам придется настроить код функции fireEvent
выше. Я тестировал только вышеприведенный пример в последнем Chrome.
Наконец, чтобы усложнить вопросы на вашем конце, Facebook использует React, который создает виртуальное представление DOM текущей страницы. Если вы вручную вводите символы в поле со списком, а затем запускаете код выше, он будет работать, как ожидалось. Но вы не сможете установить внутреннее внутреннее HTTML <span>
combobox для того, что вы хотите сделать, а затем запустить keydown
. Вероятно, вам нужно будет запустить событие change
в поле со списком, чтобы ваше сообщение сохранялось в Virtual DOM.
Это должно заставить вас начать! Надеюсь, это поможет!
Вы пытались запустить событие отправки? – BoatCode
@BoatCode yes Я пробовал –
Где ваш код, который вы _tried_? –