Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   как создать event, эмулирующий enter (https://javascript.ru/forum/events/10799-kak-sozdat-event-ehmuliruyushhijj-enter.html)

Artanis 21.07.2010 14:19

как создать event, эмулирующий enter
 
Добрый день :)
возникла проблема при создании event'а, с keyCode=13 (клавиша enter).

Мне нужно отослать input'у событие, эмулирующее клавишу enter.
Делаю я это следующим образом:

$('#element').keydown(event);


сам event пробовал создавать следующими способами:
var event = document.createEvent("KeyboardEvent");
event.initKeyEvent('keydown', true, true, null, false, false, false, false, 13, 0);


и

var event = jQuery.Event("keydown", {keyCode:13});


нужный мне элемент или не реагирует или jquery вылетает с ошибками.


Подскажите, пожалуйста, как правильно создать event для клавиши enter

e1f 21.07.2010 15:09

http://jehiah.cz/archive/firing-java...vents-properly
https://developer.mozilla.org/en/DOM/event.initKeyEvent

Artanis 21.07.2010 16:26

большое спасибо, помогло.

function  fireEvent(element,event){
		// [url]http://jehiah.cz/archive/firing-javascript-events-properly[/url]
		// [url]https://developer.mozilla.org/en/DOM/event.initKeyEvent[/url]
		if (document.createEventObject){
			// dispatch for IE
			var evt = document.createEventObject();
			return element.fireEvent('on'+event,evt)
		}
		else{
			// dispatch for firefox + others
			var evt = document.createEvent("KeyboardEvent");
			// create a key event
			evt.initKeyEvent(
					 event,				//  in DOMString typeArg,
					  true,             //  in boolean canBubbleArg,
					  true,             //  in boolean cancelableArg,
					  null,             //  in nsIDOMAbstractView viewArg,  Specifies UIEvent.view. This value may be null.
					  false,            //  in boolean ctrlKeyArg,
					  false,            //  in boolean altKeyArg,
					  false,            //  in boolean shiftKeyArg,
					  false,            //  in boolean metaKeyArg,
					   13,              //  in unsigned long keyCodeArg,
					   0);              //  in unsigned long charCodeArg);
			return !element.dispatchEvent(evt);
		}
	}

fireEvent(document.getElementById('element'), 'keypress');


тему можно закрывать :)

x-yuri 22.07.2010 02:16

а зачем эмулировать возникновение события?

alf2006x 12.07.2019 16:34

Artanis, прошу помочь с той же самой проблемой.

IE11 (требования системы, которую автоматизирую).
Нужно вызвать синтетическое событие кнопки Enter на текстовом поле.
Это последняя проблема, которую победить не могу уже неделю.

Последняя тщетная попытка такая (все работает без ошибок, возвращает Истину, но кнопка не нажимается):

Яндекс выбран для примера.

IE = Новый COMОбъект("InternetExplorer.Application");
IE.Visible = Истина;
IE.Navigate("https://yandex.ru");
// ... пауза 5 сек для гарантированной загрузки страницы
IE.document.parentWindow.focus(); // Срабатывает! Окно переводится на передний план
IE.Document.parentWindow.execScript("
|var eventObj_down = document.createEvent(""Events"");
|eventObj_down.initEvent(""keydown"", true, true);
|eventObj_down.keyCode = 13;
|eventObj_down.which = 13;
|obj = document.getElementById(""text"");
|obj.focus();
|obj.value = ""123321"";
|obj.dispatchEvent(eventObj_down);
|alert(obj.id);            // это контрольный, чтобы убедиться что работаю именно с тем полем, которое мне нужно
|");


Пытался это событие "нажимать" на тегах более высокого уровня, пытался последовательно применять keydown-keypress-keyup.

Всё тщетно. Не работает и всё тут.
Подозреваю что система может контролировать признак IsTrusted.
Но надеюсь что это не так.


Заранее спасибо за любую информацию.

j0hnik 13.07.2019 11:28

Цитата:

Сообщение от alf2006x
Пытался это событие "нажимать" на тегах более высокого уровня

зачем гадать смотрите в event listeners, на каком элементе висит слушатель

alf2006x 15.07.2019 14:01

Цитата:

Сообщение от j0hnik (Сообщение 510207)
зачем гадать смотрите в event listeners, на каком элементе висит слушатель

Спасибо, большое за совет.
Я уже пытался это сделать, но, к большому сожалению, мои познания по этому направлению весьма и весьма скромные. А времени найти это на просторах "великого и могучего" совсем нет. Буду очень признателен если уточните как это сделать.
Хотя бы на примере того же "Яндекса".

Заранее спасибо.

j0hnik 16.07.2019 06:40

alf2006x,
что там в яндекс? поиск?
это клик по кнопке
document.querySelector('.suggest2-form__button').click();

и обратите внимание в вашем коде
document.getElementById(""text"");

кавычек многовато


Часовой пояс GMT +3, время: 02:02.