Вопрос: Можно ли включить какой-либо символ (например, \ r или \ n, или какой-либо символ, сгенерированный функцией кодирования) в конце строки символов, установленной в качестве значения элемент ввода текста, чтобы заставить форму отправлять это содержимое - как нажатие клавиши Return в поле ввода текста может привести к отправке формы? Я сталкивался с некоторыми не браузерными клиентами, которые отправляют данные, когда копируемый текст, включая символы возврата каретки, вставляются - поэтому мне интересно, возможно ли это как-то возможно в Javascript? До сих пор в среде этой страницы / скрипта я пытался добавить \r
, \n
и \r\n\r
безуспешно, но мне интересно, может ли работать какой-то специальный символ или, возможно, я что-то упустил.
Справочная информация:
Я работаю над расширением Firefox, которое должно заполнить поле ввода, а затем отправить форму внутри набора фреймов. Сама форма имеет свою собственную определяемую сценарием (то есть не являющуюся частью кода расширения) функцию отправки. Я прочитал, что выполнение form.submit()
препятствует выполнению атрибута onsubmit формы; и использование onsubmit()
для отправки формы не в состоянии обеспечить правильную функцию страницы, которая указывает мне, что это функция, определенная сценарием в коде onsubmit, которую необходимо выполнить - это означает, что нужно просто заполнить поле через Javascript и затем отправить Форма с Javascript не будет работать. Я мог бы попытаться как-то вызвать функцию сайта, запустив событие на странице, но это создает сложную ситуацию, когда мы работаем над обходным решением (что не так уж редко встречается в Javascript) - но все было бы намного сложнее. элегантно, если можно просто добавить символ возвращаемого типа в конец строки, которая вставляется в атрибут значения входного элемента.
Прогресс:
Джон, Джон и Лягушка, спасибо всем за ваш вклад здесь. Похоже, мне нужно будет выполнить create-init-dispatch события keydown или keyup. Я сообщу далее, поскольку дальнейший прогресс достигнут; новые идеи по-прежнему очень приветствуются, особенно в категории: «Это может сработать и привести к отправке формы?»
Я попытался поиграться с самим расширением, но столкнулся с некоторыми проблемами. Чтобы протестировать диспетчеризацию событий клавиатуры в целом, я создал простой тестовый документ HTML - однако, похоже, что здесь что-то не так. При нажатии на кнопку я получаю «отправленное» предупреждение, но в поле ввода ничего не добавляется, когда myKeyCode равен 65 (значение «A»). Также не отправляется, когда значение равно 13 (или ВОЗВРАТ). Возможно, кто-то может найти что-то не так в этом коде. Код тестируемый и редактируемый на http://jsbin.com/orudu4/1/edit
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Tester for Extension</title>
<script type="text/javascript">
var myKeyCode = 65; // should be "A"
// var myKeyCode = 13; // should be RETURN
function fireIt(){
var el = document.getElementById("inputId");
el.focus();
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keydown', true, true, window, false, false, false, false, myKeyCode, 0);
el.dispatchEvent(e);
alert("dispatched");
}
</script>
</head>
<body>
<form action="nowhere.html" onsubmit="alert('submited');">
<input type="button" value="button" onclick="fireIt()" />
<input type="text" id="inputId" value="value" />
</form>
</body>
</html>
Примечание:
Я вижу из некоторых комментаторов (которые тем не менее дали отличные ответы), что некоторые при чтении вышеизложенного предполагают, что пользователь нажимает клавишу. Это не тот случай. События, запускающие необходимые действия: 1) пользователь нажимает кнопку на панели инструментов и 2) изменение html