jQuery로 'Enter'에 양식을 제출 하시겠습니까?


427

HTML / jQuery를 사용하는 AIR 프로젝트의 전자 메일 텍스트 필드, 암호 필드 및 제출 단추와 같은 늪지 표준 로그인 양식이 있습니다. 양식에서 Enter 키를 누르면 전체 양식의 내용이 사라지지만 양식은 제출되지 않습니다. 누구나 이것이 Webkit 문제인지 (Adobe AIR에서 HTML에 Webkit을 사용하는지) 또는 내가 묶은 것을 알고 있습니까?

나는 시도했다 :

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

그러나 그것은 지우기 행동을 멈추거나 양식을 제출하지 않았습니다. 양식과 관련된 작업이 없습니다. 문제가 될 수 있습니까? 액션에 자바 스크립트 함수를 넣을 수 있습니까?


3
<input ...에 class = "input"속성이 있습니까? $ ( 'input'). keypress ... 인 것 같습니다.
NexusRex

클래스는 CMS에 의해 프로그래밍 방식으로 생성됩니다. 그러나 그 외에 $ ( 'input')으로 범위를 지정하면 페이지의 모든 입력에 영향을 미치며, 내가 행동을 원하든 원하지 않든 상관 없습니다. 당신의 감성을 상하게하는 것은 유감입니다.
hollenbeck이 되십시오

15
감도는 최소한으로 화를 내지 않았다. 문제를 일으키는 것은 감독일지도 모른다고 생각했습니다. 계속하십시오.
NexusRex

1
참고 : 귀하의 답변은 완전히 정확하지 않습니다. 아래 내 답변을 참조하십시오.
NoBrainer

답변:


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

이 stackoverflow 답변을 확인하십시오 : event.preventDefault () vs. false 반환

기본적으로, "반환 거짓은"호출과 동일 e.preventDefault하고 e.stopPropagation().


3
그것들은 동일하지 않습니다. IE8에는 e.preventDefault가 없습니다. IE8의 경우 event.returnValue = false를 사용하십시오.
mbokil

8
@mbokil jQuery를 사용할 때를 제외하고는 IE8에서도 동일합니다. 그리고 IE7. 그리고 IE6.
케빈 B

입력 필드에 먼저 입력하려면 "return false;"를 입력하십시오. if 문 안에.
Juni Brosas

173

Jason Cohen이 언급했듯이 false를 반환합니다. 당신은 또한 방지해야 할 수도 있습니다

e.preventDefault();

13
@NoBrainer 말했듯이, 이것은 잘못된 것입니다 : return false자동 e.preventDefault ()를 호출 jQuery를 관리하는 경우에
리카르도 갈리

83

도움이 될지 모르겠지만 양식을 직접 제출하는 대신 제출 버튼 클릭을 시뮬레이션 할 수 있습니다. 프로덕션에 다음 코드가 있으며 정상적으로 작동합니다.

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

참고 : jQuery ( '# submit'). focus () 는 Enter 키를 누를 때 버튼에 애니메이션 효과를줍니다.


2
훌륭하게 작동하지만 "false return"을 추가해야했습니다. 이중 양식 제출을 방지합니다.
code90

일하는 | 트리거, sendkey 등 doh, blah ...에 대해 말하는 것과 같은 많은 결과를 참조하십시오. 그러나 그것은 나에게 유일한 작품이며 실제로 버튼을 클릭합니다. 제출하지 않음 (). 따라서 트릭은 focus (). click () 함수였습니다. 감사합니다.
m3nda

작동하지만이 코드를 아래에 넣어야했습니다 : $ (document) .ready (function () {...
shasi kanth


30

Enter 키를 연결하고 테스트해야하는 이유가 있습니까?

당신은 단순히 추가 할 수 없습니다

<input type="submit" /> 

당신의 양식에 입력하고 enter를 눌렀을 때 자연스럽게 제출됩니까? 원하는 경우 폼의 onsubmit동작 을 연결하고 원하는 경우 유효성 검사 함수를 호출 할 수 있습니다 ...

onsubmit양식을 제출했는지 테스트하기 위해 테스트로 사용할 수도 있지만을 호출하면 작동하지 않습니다 form.submit().


1
전적으로 동의합니다. 필자는 선호하는 스크립트를 추가하는 대신 브라우저의 기본 기능 (type = submit 입력은 기본적으로 Enter 키 누르기에 응답 함)을 사용하는 것이 좋습니다.
Aaron

1
문제는 아약스 작업을하고 서버에 실제로 포스트 백이 없지만 UI가 사용자가 기대하는 것처럼 작동하기를 원한다면 어떻게해야합니까?
devlord

실제로 ... 나는 모든 return false;것을 간과했습니다 .
devlord

14

이 기능을 JQuery 플러그인으로 사용하는 방법은 다음과 같습니다 (기능을 재사용하려는 경우).

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

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

<input>이 유형의 기능으로 요소 를 장식하려면 다음 과 같이 간단합니다.

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

12

onsubmit="return false"기본 동작을 방지하기 위해 페이지의 양식 코드에 간단히 추가 할 수도 있습니다.

그런 다음 후크 ( .bind또는 .live양식의) submit자바 스크립트 파일에서 jQuery로 모든 기능에 이벤트를.

다음은 도움이되는 샘플 코드입니다.

HTML

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

자바 스크립트 + jQuery

$(document).ready(function() {

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

이것은 Firefox 4.0 및 jQuery 1.4.3에서 2011-04-13부터 작동합니다.


Chrome에서는 작동하지 않습니다. 어쨌든 제출합니다.
Marcelo Agimóvel

5

이것은 내 코드입니다.

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

4

또한 접근성을 유지하려면 다음을 사용하여 키 코드를 결정해야합니다.

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

if (c == 13) ...

3

쉬운 구현을 위해 추가하기 만하면됩니다. 간단히 양식을 만든 다음 제출 버튼을 숨길 수 있습니다.

예를 들면 다음과 같습니다.

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

@cebirci 및 크롬 버전은 무엇입니까? 랩톱에서 PC로 테스트했으며 코드가 작동합니다. 내 답변을 표시하기 전에 최신 크롬을 다운로드하십시오.
Joem Maranan

2

나는 지금 사용한다

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

처음에는 이벤트 처리기를 제출 버튼에 추가하여 오류가 발생했습니다.


1

오늘 Enter 키를 누를 때 키 누르기 이벤트가 시작되지 않았으므로 대신 keydown () 또는 keyup ()으로 전환 할 수 있습니다.

내 테스트 스크립트 :

        $('.module input').keydown(function (e) {
            var keyCode = e.which;
            console.log("keydown ("+keyCode+")")
            if (keyCode == 13) {
                console.log("enter");
                return false;
            }
        });
        $('.module input').keyup(function (e) {
            var keyCode = e.which;
            console.log("keyup ("+keyCode+")")
            if (keyCode == 13) {
                console.log("enter");
                return false;
            }
        });
        $('.module input').keypress(function (e) {
            var keyCode = e.which;
            console.log("keypress ("+keyCode+")");
            if (keyCode == 13) {
                console.log("Enter");
                return false;
            }
        });

키보드에서 "A Enter B"를 입력 할 때 콘솔의 출력 :

keydown (65)
keypress (97)
keyup (65)

keydown (13)
enter
keyup (13)
enter

keydown (66)
keypress (98)
keyup (66)

두 번째 시퀀스에서 'keypress'가 누락되었지만 keydown 및 keyup register code '13'이 눌려 지거나 해제 된 것으로 나타납니다. 당으로서 ) (기능 키를 누를 때의 jQuery 문서 :

Note: as the keypress event isn't covered by any official specification, the actual behavior encountered when using it may differ across browsers, browser versions, and platforms.

Server 2012 R2의 IE11 및 FF61에서 테스트


0

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
        }
    });
}

1
여러 질문에 동일한 답변을 게시하지 마십시오. 하나의 좋은 답변을 게시 한 다음 투표 / 플래그를 붙여 다른 질문을 중복으로 닫습니다. 질문이 중복되지 않은 경우 질문에 대한 답변을 조정하십시오.
Paul Roub

@PaulRoub 내 대답은 다른 것과 다릅니다.
mghhgm 2014 년

어떻게에서이 응답 다른 또는 ?
Paul Roub

@PaulRoub이 문제가 있으며 먼저 Google에서 검색하십시오. 그 페이지는이 문제에 대해 이야기하지만 단순하지는 않습니다. 최고의 답변을 찾으면 해당 페이지 에서이 정보를 검색 할 때 사용자를 돕기 위해 이야기하고 비슷한 스택 오버 플로우 페이지에서 내 답변을 볼 수 있다고 이야기했습니다.
mghhgm 2014 년

1
이 답변은 전혀 질문과 관련이 없습니다
Zoltán Süle

-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();
        }
    })
}

9
이것은 jquery를 바닐라 자바 ​​스크립트와 불편한 방식으로 혼합하고 있으며, 사물을 혼란스럽게 만드는 정말 이상한 캐스트를 포함합니다
moopet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.