Можно ли программно использовать возвращаемый символ в поле ввода текста для запуска отправки формы? - PullRequest
3 голосов
/ 24 марта 2011

Вопрос: Можно ли включить какой-либо символ (например, \ 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

Ответы [ 4 ]

1 голос
/ 24 марта 2011

Редактировать: Не видел, что вам нужен только javascript.

Возможно, вы можете отправить POST к URL-адресу формы?


Что если вы имитируете нажатие клавиши ввода?

function simulateKeyPress(character) {
  jQuery.event.trigger({ type : 'keypress', which : character.charCodeAt(0) });
}

$(function() {
  $('body').keypress(function(e) {
alert(e.which);
  });

  simulateKeyPress("e");
});

Взято из ЗДЕСЬ

1 голос
/ 24 марта 2011

Судя по вашему комментарию к ответу Джона, проблема не в том, что вы хотите, чтобы форма автоматически отправлялась, когда пользователь нажимает ввод. Форма уже отправлена ​​автоматически, когда пользователь нажимает ввод, и вы хотите имитировать пользователя, нажимающего ввод с вашего добавочного номера. Если я правильно понял, я думаю, вы хотите dispatchEvent. Если вы просмотрите исходный код jQuery, вы, вероятно, обнаружите, что именно это делает предложение jonshariat.

1 голос
/ 24 марта 2011

Используя событие keydown:

   document.getElementById("YourInputID").onkeydown = function(evt) {
     evt = evt || window.event;
     if (evt.keyCode == 13) {
        // submit your form
     }
   }

или если вы прикрепляете событие в своем HTML, как это

<script>
   function enterKeyPressed(evt) {
     evt = evt || window.event;
     if (evt.keyCode == 13) {
       // submit your form
     }
   }
</script>

<body>
   <input type="text" onkeydown="enterKeyPressed(event)" />
</body>
0 голосов
/ 01 апреля 2011

Ответ здесь выглядит как «НЕТ» - возвращаемые символы, программно вставленные в элементы ввода в формах, не вызывают отправку формы.

Я уже отмечал, что этого нельзя сделать простым добавлением \ n\ r \ n до конца строки, которая установлена ​​как атрибут значения входного элемента;и после долгих проб и ошибок мне наконец удалось добавить стандартный, видимый символ («A») в поле ввода, используя событие клавиатуры.Затем я попытался использовать символы возврата каретки, перевода строки и перевода формы в поле ввода, и ни одна из этих вынужденных отправок формы.

Относительно получения этой работы - я бы не понял, если бы несовет Джонсариата, Джона Хартстока и MatrixFrog.Я также провел еще несколько исследований.Оказывается: нам нужно событие нажатия клавиши, а не событие нажатия клавиши;тип созданного события был KeyEvents, а не KeyboardEvent;и шестнадцатеричный код использовался для обозначения символа вместо стандартного десятичного обозначения.

Вот тестовый скрипт: http://jsbin.com/eyiko5/1/edit

...