2016-07-05 5 views
2

Я пытаюсь устранить PHP-форму на сайте Drupal 7. На данный момент форма может быть отправлена ​​только в том случае, если пользователь нажимает кнопку. Я хотел бы включить отправку с помощью клавиши «Ввод». Как я могу это сделать?Drupal PHP Form Submit On Enter

Вот соответствующий код:

$form['search']['search_button'] = array(
      '#type' => 'button', 
      '#value' => 'Search', 
      '#ajax' => array(
       'callback' => 'ajax_search_callback', 
//   'wrapper' => 'search-results', 
       'wrapper' => 'search', 
       'method' => 'replace', 
       'effect' => 'fade', 
       'event' => 'click', 
      ), 
     ); 

Я подозреваю, что мне нужно изменить поле «событие» или добавить еще одно поле.

+1

См http://drupal.stackexchange.com/questions/5780/ajax-submitted-forms-with-enter по тому же вопросу (и некоторые ответы) –

ответ

0

Вам нужно добавить атрибут keypress в массив ajax и установить его в ИСТИНА. Объясняется в форме документации api, here.

EDIT: Первое решение работает только для одного поля ввода. Для того, чтобы добавить событие на нажатие форме, вы должны добавить «OnKeyPress» атрибут в форме, добавив его в attributes массиве:

$form['#attributes']['onkeypress'] = 'if(event.keyCode==13){this.form.submit();}'; 

Где 13 является кодом клавиши для ввода (или возврата для макинтош).

Я не знаю, является ли это самым чистым решением, но оно должно работать.

+0

Будет ли это применяться, когда фокус находится на кнопке или любом другом элементе формы? – MadPhysicist

+0

Согласно документации, только если кнопка имеет фокус. –

+0

Вы правы Пьера, для этого требуется кнопка фокуса. Однако это решение кажется нецелесообразным. Я сделал редактирование с другим решением. – RedhaL

0

Я не эксперт в JS, но именно так я бы сам занялся проблемой.

Я не проверял, но я предлагаю добавить что-то вроде следующего утверждения в ваших JS файл

$(document).ready(function() { 
    $("#target").keypress(function() { 
    if (event.which == 13) { 
     $('my_form').submit(); 
    } 
    }); 
}); 

В принципе, вы посмотрите на событие нажатия клавиши 13, то вы отправить форму.

Надеюсь, ваша форма не содержит тегов textarea, потому что вы можете столкнуться с некоторыми проблемами пользователей.

EDIT: Где добавить Javascript?

Я предполагаю, что вы создаете собственный модуль для создания своей формы, поэтому вы можете добавить путь к файлу .info вашего модуля или использовать функцию drupal_add_js("your_path_to_js_file");, которая, вероятно, является лучшим решением здесь.

Надеюсь, это поможет.

Приветствия

+0

Какой JS-файл я бы добавил? Это сайт Drupal. – MadPhysicist

+0

Я отредактировал мое сообщение, чтобы дать вам более чистый ответ. –

1

Это работает для меня:

$form[FORM_ITEM]['#attributes']['onkeypress'][]="jQuery('input').keydown(function(e) {if (e.keyCode == 13) {e.preventDefault(); jQuery('#edit-submit').mousedown();}});";