2009-03-30 4 views
376

У меня есть форма входа в систему для болота - текстовое поле электронной почты, поле пароля и кнопка отправки в проекте AIR, использующем HTML/jQuery. Когда я нажимаю Enter в форме, содержимое всей формы исчезает, но форма не отправляется. Кто-нибудь знает, является ли это проблемой Webkit (Adobe AIR использует Webkit для HTML), или если я набросал все это?Отправка формы в 'Enter' с помощью jQuery?

Я пробовал:

$('.input').keypress(function (e) { 
    if (e.which == 13) { 
    $('form#login').submit(); 
    } 
}); 

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

+3

У вас действительно есть атрибут class = "input" на вашем NexusRex

+0

Классы программно генерируются CMS. Однако, кроме этого, определение его до $ («вход») повлияет на каждый вход на странице, независимо от того, нужно ли мне поведение или нет. Извините, это оскорбляет вашу чувствительность. –

+14

Чувствительность не оскорблена как минимум. Просто подумал, что это может быть надзор, который ведет к этой проблеме. Продолжать. – NexusRex

ответ

305
$('.input').keypress(function (e) { 
    if (e.which == 13) { 
    $('form#login').submit(); 
    return false; //<---- Add this line 
    } 
}); 

ПРИМЕЧАНИЕ: Вы приняли ответ bendewey, но это неправильно с его описанием e.preventDefault(). Проверьте этот StackOverflow ответ: event.preventDefault() vs. return false

По существу, «возвращение ложным» это то же самое, как вызов e.preventDefault и e.stopPropagation().

+3

Обратите внимание, что они не совпадают. В IE8 нет e.preventDefault. Для IE8 используйте event.returnValue = false; – mbokil

+8

@mbokil За исключением того, что при использовании jQuery это то же самое в IE8 и IE7. IE6. –

+0

Если вы хотите ввести сначала в поля ввода, поместите «return false» внутри оператора if. –

61

Возврат false, чтобы предотвратить нажатие клавиши.

170

В дополнение к возврату false, как упоминал Джейсон Коэн. Возможно, вам также необходимо будет предотвратить детекцию

e.preventDefault(); 
+7

Это неправильно. Обратитесь к моему ответу ниже. – NoBrainer

+11

как @NoBrainer сказал, это неправильно: 'return false' в событии, управляемом jQuery, автоматически вызывает e.preventDefault() –

27

Есть ли причина, по которой вам нужно подцепить и проверить ключ ввода?

не могли бы вы просто добавить

<input type="submit" /> 

к вашей форме и это, естественно, будет представлен при входе выталкивается? Вы могли бы даже зацепить действие формы onsubmit и вызвать функцию проверки оттуда, если хотите ...

Вы могли бы даже использовать onsubmit в качестве теста, чтобы узнать, отправляется ли ваша форма, но она не будет работать если вы звоните form.submit().

+1

Полностью согласен. Мое предпочтение всегда заключалось в том, чтобы использовать собственные функции браузера (входы типа = submit изначально реагируют на нажатие клавиши ввода), а не на добавление дополнительных скриптов. – Aaron

+1

Проблема в том, что если вы делаете ajax-материал, и нет Фактическая обратная передача на сервер, но вы хотите, чтобы пользовательский интерфейс вел себя так, как ожидает пользователь? – devlord

+0

В самом деле ... Я забыл все «вернуть ложь». – devlord

75

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

$('.input').keypress(function(e) { 
     if(e.which == 13) { 
      jQuery(this).blur(); 
      jQuery('#submit').focus().click(); 
     } 
    }); 

Примечание: JQuery («# Submit») фокус() делает кнопку одушевленные при входе нажимается..

+1

Отлично работает, но мне пришлось добавить «return false;» для предотвращения подачи двойной формы. – code90

+0

Работа | См. Много результатов, таких как разговор о триггерах, sendkey и т. Д., Doh, blah ..., но это единственные работы для меня и действительно отправить клик по кнопке. Не отправлять(). Итак, фокус был фокусом(). Функции click() в secuence. СПАСИБО. – erm3nda

+0

Работает, но мне нужно было поместить этот код под: $ (document) .ready (function() {... –

4

Также для поддержания доступности, вы должны использовать эту функцию, чтобы определить код ключа:

c = e.which ? e.which : e.keyCode; 

if (c == 13) ... 
+6

Это уже нормализовано jQuery – Blaise

2

Я использую сейчас

$("form").submit(function(event) 

Сначала я добавил EventHandler на кнопку отправки, который выдал ошибку для меня.

12

Вы также можете просто добавить onsubmit="return false" в код формы на странице, чтобы предотвратить поведение по умолчанию.

Затем переместите (.bind или .live) событие формы submit в любую функцию с jQuery в файле javascript.

Вот пример кода, чтобы помочь:

HTML

<form id="search_form" onsubmit="return false"> 
    <input type="text" id="search_field"/> 
    <input type="button" id="search_btn" value="SEARCH"/> 
</form> 

Javascript + Jquery

$(document).ready(function() { 

    $('#search_form').live("submit", function() { 
     any_function() 
    }); 
}); 

Это работает от 2011-04-13, с Firefox 4.0 и jQuery 1.4.3

-4

// попробуйте этот код ниже; // надеюсь, что это может помочь;

var form = document.formname; 

if($(form).length > 0) 
{ 
    $(form).keypress(function (e){ 
     code = e.keyCode ? e.keyCode : e.which; 
      if(code.toString() == 13) 
      { 
      formsubmit(); 
      } 
    }) 
} 
+8

Это смешение jquery с javascript в vanilla неудобно и включает в себя действительно нечетный литой, который просто сбивает с толку вещи – moopet

13

Вот способ сделать это как плагин JQuery (в случае, если вы хотите повторно использовать функциональные возможности):

$.fn.onEnterKey = 
    function(closure) { 
     $(this).keypress(
      function(event) { 
       var code = event.keyCode ? event.keyCode : event.which; 

       if (code == 13) { 
        closure(); 
        return false; 
       } 
      }); 
    } 

Теперь, если вы хотите украсить с этим типом функциональности это так просто, как это:

$('#your-input-id').onEnterKey(
    function() { 
     // Do stuff here 
    }); 
1

Просто добавление для легкой реализации. Вы можете просто сделать форму, а затем сделать кнопку отправить скрытых:

Например:

<form action="submit.php" method="post"> 
Name : <input type="text" name="test"> 
<input type="submit" style="display: none;"> 
</form> 
+0

Chrome не работает со скрытым вводом ввода. –

+0

@cebirci и какая версия - ваш хром? Я тестировал с ноутбуков pc и мой код просто работает. Попробуйте загрузить новейший хром, прежде чем пометить его по моему ответу. –

3

Это мой код:

$("#txtMessage").on("keypress", function(event) { 
    if (event.which == 13 && !event.shiftKey) { 
     event.preventDefault(); 
     $("#frSendMessage").submit(); 
    } 
    }); 
-1

В HTML кодов:

<form action="POST" onsubmit="ajax_submit();return false;"> 
    <b>First Name:</b> <input type="text" name="firstname" id="firstname"> 
    <br> 
    <b>Last Name:</b> <input type="text" name="lastname" id="lastname"> 
    <br> 
    <input type="submit" name="send" onclick="ajax_submit();"> 
</form> 

Код Js:

function ajax_submit() 
{ 
    $.ajax({ 
     url: "submit.php", 
     type: "POST", 
     data: { 
      firstname: $("#firstname").val(), 
      lastname: $("#lastname").val() 
     }, 
     dataType: "JSON", 
     success: function (jsonStr) { 
      // another codes when result is success 
     } 
    }); 
} 
+0

Пожалуйста, не публикуйте идентификатор ответы на несколько вопросов. Отправьте один хороший ответ, затем проголосовате/отметьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, * приложите свои ответы на вопрос. * –

+0

@PaulRoub мой ответ имеет некоторую разницу с другой. – mghhgm

+0

Как этот ответ отличается от [this] (http://stackoverflow.com/a/46490387) или [this] (http://stackoverflow.com/a/46490427)? –