제출 단추없이 Enter를 눌러 양식 제출


322

Enter 키를 눌러 제출 양식을 제출하려고하지만 제출 버튼을 표시하지 않습니다. 모든 브라우저에서 모든 것이 작동하기를 원하기 때문에 가능한 경우 JavaScript에 들어가고 싶지 않습니다 (내가 아는 유일한 JS 방법은 이벤트와 관련이 있습니다).

현재 양식은 다음과 같습니다.

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>

어느 것이 잘 작동합니까? 제출 버튼은 사용자가 enter를 누를 때 작동하며 Firefox, IE, Safari, Opera 및 Chrome에 버튼이 표시되지 않습니다. 그러나 모든 브라우저가있는 모든 플랫폼에서 작동하는지 여부를 알기가 어렵 기 때문에 여전히 솔루션을 좋아하지 않습니다.

누구든지 더 나은 방법을 제안 할 수 있습니까? 아니면 얻을만큼 좋은가요?


7
CSS에서 몇 문자를 깎을 수있는 작은 점으로, 일반적으로 자동 축소 기가 수행됩니다. 길이가 0 인 측정에는 단위가 필요하지 않습니다. 0px = 0pt = 0em = 0em 등
pwdst

@pwdst이 점을 지적 해 주셔서 감사합니다. 저는 파이썬 세계에서 왔으므로 "명시 성이 암시 적보다 낫습니다". 이것이 CSS의 경우인지 진정으로 궁금하거나 CSS 제작자가 다른 관용구를 가지고 있습니까?
ericmjl

2
여기서는 @ericmjl-0px == 0em == 0 % == 0vh == 0vh 등을 제외하고 0입니다. 다른 길이가 아닌 다른 길이 측정에서는 잘못된 연습 일뿐만 아니라 단위를 지정하지 않는 표준과 사용자 에이전트 (브라우저)에서 다양한 동작을 볼 수 있습니다. 참조 developer.mozilla.org/en-US/docs/Web/CSS/lengthdrafts.csswg.org/css-values-3/#lengths
pwdst

2
의심스러운 경우, 명시 적 길이 단위를 다른 말로 표현하십시오.
pwdst

3
확실히 0으로 단위를 추가하는 것은 아프지 않지만 언어에 관계없이 실제로 수학 추상화에 이르기까지 100 % 유효하지 않아야합니다. OTOH를 사용하는 것과 사용하지 않는 것의 편리한 사용법은 주어진 속성이 "실제로 0을 의미하고 그런 식으로 유지"(단위 없음)인지 메시지를 전달하는 것입니다. 그러나 맛에 맞게 조정될 수도 있고, 또는 무엇이든 ... "(단위 포함).
Sz.

답변:


237

시험:

<input type="submit" style="position: absolute; left: -9999px"/>

화면에서 버튼을 왼쪽으로 밀어냅니다. 이것의 좋은 점은 CSS가 비활성화되면 정상적으로 저하됩니다.

업데이트-IE7에 대한 해결 방법

Bryan Downing +에서 제안한대로 tabindex탭 이이 버튼에 닿지 않도록 (Ates Goral) :

<input type="submit" 
       style="position: absolute; left: -9999px; width: 1px; height: 1px;"
       tabindex="-1" />

9
Erebus와 동일한 결과로 IE7 에서이 솔루션을 사용해 보았습니다. 다음 코드가이를 수정합니다.position: absolute; width: 1px; height: 1px; left: -9999px;
Bryan Downing

84
끔찍한 해킹 :( 왜 HTML이 처음부터
이런가

28
@nornagon :이 핵이 끔찍하다고 생각되면 덜 끔찍한 것을 제안하십시오. HTML은 그것이 무엇인가 ...
Ates Goral

13
@MooseFactorytabindex="-1"
Ates Goral

14
"좋은 점은 ... CSS를 사용할 수 없을 때의 우아한 저하"입니다! 나는 이것이 훌륭하게 작동하지만 "우아한 저하"부분은 마케팅 전략 일 뿐이라고 확신한다. 2002 년부터이 페이지를 찾을 때까지 나는 그것을 듣지 못했습니다 . 맞습니다. "브라우저에서 css is disabled"에 대한 첫 페이지 의 유일한 Google 검색 결과는 10 년 전입니다 (또는이 답변이 2009 년에 완료되었다고 가정하면 7 개).
Vicky Chijwani

97

나는 당신 자바 스크립트 경로를 가야 한다고 생각합니다 .

<script type="text/javascript">
// Using jQuery.

$(function() {
    $('form').each(function() {
        $(this).find('input').keypress(function(e) {
            // Enter pressed?
            if(e.which == 10 || e.which == 13) {
                this.form.submit();
            }
        });

        $(this).find('input[type=submit]').hide();
    });
});
</script>


<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" />
</form>

6
좋은 하나, 테스트하고 잘 작동합니다. 그러나 이와 같은 것을 시도하기 전에 Javascript를 통해 양식을 제출해도 일부 브라우저는 암호 저장 기능을 제공하지 않습니다.
andyk

3
그러면 제출 버튼이 잠시 동안 나타납니다 (페이지가로드되고 JS가 실행될 때까지).
nornagon

15
사용자가 이메일 주소를 입력하고 Enter 키를 눌러 브라우저의 자동 완성에서 이전에 주어진 주소를 선택하면 양식이 제출됩니다. 사용자가 기대하는 바가 아닙니다.
cburgmer

2
폭 넓은 지원 keydownkeypress위해 로 전환 했지만 Chrome을 지원 하려면 추가 e.preventDefault();하기 전에 추가 해야합니다 if.
Campbeln

1
@Campbeln .on('keypress'...)대신 사용할 수 있습니다 . 당신을 .on()위해 .preventDefault()전화를 하는 것처럼 보이는 문서 .
jinglesthula

79

이것을 시도 했습니까?

<input type="submit" style="visibility: hidden;" />

대부분의 브라우저는 이해 visibility:hidden하고 실제로 작동하지 않기 display:none때문에 괜찮을 것이라고 생각합니다. 실제로 직접 테스트하지 않았으므로 CMIIW.


3
대한 한 가지가있다 visibility: hidden: 당신이 읽을 수 W3 스쿨 , visibity : 아무도 아직 레이아웃에 영향을주지 않습니다. 이 공백을 피하려면 절대 위치 지정 솔루션이 더 나은 것 같습니다.
loybert

8
두 솔루션을 결합 할 수 있습니다.<input type="submit" style="visibility: hidden; position: absolute;" />
VaclavSir

2
젠장, 이것은 IE8에서 작동하지 않으므로 (양식을 제출하지 않음) 위의 해결책이 승리합니다.position: absolute; left: -100px; width: 1px; height: 1px;
VaclavSir

31

제출 버튼이없는 다른 솔루션 :

HTML

<form>
  <input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>

jQuery

$(document).ready(function() {

  $('.submit_on_enter').keydown(function(event) {
    // enter has keyCode = 13, change it if you want to use another button
    if (event.keyCode == 13) {
      this.form.submit();
      return false;
    }
  });

});

1
이상한 트릭. 버튼을 텍스트 상자로 만듭니다! 그러나 트릭이 모든 브라우저에서 작동하기 때문에 나는 당신을 인정했습니다!
Jenna Leaf

고마워 @JennaLeaf ;-) 어쨌든 나는 그렇게 이상하지 않다고 생각합니다-많은 온라인 양식이 단순히 키 다운의 "트리거링"을 제출하는 데 사용됩니다. 예를 들어 Google 검색 창이있을 수 있습니다 (아마도이 ​​코드를 정확하게 사용하지는 않지만 비슷한 코드 일 수 있습니다).
damoiser

16

미래 에이 답변을 보는 사람이라면 누구나 HTML5가 양식 요소에 대한 새로운 속성을 구현하여 hidden자동으로 display:none요소에 적용 됩니다.

예 :

<input type="submit" hidden />

데스크톱 Chrome에서는 작동하지만 iPhone의 Chrome 또는 Safari에서는 작동하지 않는 것 같습니다.
울프 아담스

@UlfAdams iPhone 12.1.2의 Chrome 및 Safari에서 작동합니다.
Matthew Campbell

13

다음 코드를 사용하면 3 개의 브라우저 (FF, IE 및 Chrome)에서 문제가 해결되었습니다.

<input  type="submit" name="update" value=" Apply " 
    style="position: absolute; height: 0px; width: 0px; border: none; padding: 0px;"
    hidefocus="true" tabindex="-1"/>

적절한 이름과 값을 사용하여 코드에서 첫 번째 행으로 위의 행을 추가하십시오.


7

현재 버튼을 숨기기 위해 사용하는 핵 대신 visibility: collapse;스타일 속성에서 설정하는 것이 훨씬 간단 합니다. 그러나 여전히 간단한 Javascript를 사용하여 양식을 제출하는 것이 좋습니다. 내가 이해하는 한, 오늘날 그러한 것들에 대한 지원은 어디에나 있습니다.


7

hidden 속성을 true로 설정하십시오.

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" hidden="true" />
</form>

4
숨겨진 속성은 Enter 키를 눌러 제출을 비활성화합니다.
66Ton99

@ 66Ton99 FF로 테스트하십시오. 제출을 비활성화하지 않습니다
Eugen Konkov

1
"내 컴퓨터에서 작동합니다";) firefox보다 더 많은 브라우저가 있습니다. 브라우저 간 현명하게 작동하는 솔루션을 원할 수도 있습니다.
Félix Gagnon-Grenier

Chrome 63에서 작동
piotr_cz

현재 iPhone의 Chrome 또는 Safari에서는 작동하지 않습니다.
울프 아담스

7

가장 우아한 방법은 제출 버튼을 유지하지만 테두리, 패딩 및 글꼴 크기를 0으로 설정하는 것입니다.

버튼 크기가 0x0이됩니다.

<input type="submit" style="border:0; padding:0; font-size:0">

직접 시도해 볼 수 있으며 요소에 윤곽선을 설정하면 0x0 px 요소를 둘러싸는 바깥 쪽 테두리 인 점이 표시됩니다.

가시성이 필요하지 않습니다. 숨겨져 있지만 밤에 잠을 자면 믹스에 넣을 수도 있습니다.

JS 피들


5

제출 단추가 표시되지 않고 양식에 필드가 둘 이상 있으면 IE는 양식 제출을 위해 ENTER 키를 누를 수 없습니다. 제출 버튼으로 1x1 픽셀 투명 이미지를 제공하여 원하는 것을 제공하십시오. 물론 레이아웃의 픽셀을 차지하지만 숨기려면 어떻게해야합니까?

<input type="image" src="img/1x1trans.gif"/>

4

이것은 내 솔루션이며 Chrome, Firefox 6 및 IE7 +에서 테스트되었습니다.

.hidden{
    height: 1px;
    width: 1px;
    position: absolute;
    z-index: -100;
}

IE8이 position : absolute를 좋아하지 않는 것 같습니다. 제출하지 않습니다.
maxxyme

4
<input type="submit" style="display:none;"/>

이것은 잘 작동하며 달성하려는 것의 가장 명확한 버전입니다.

다른 폼 요소 display:nonevisibility:hidden다른 폼 요소 에는 차이가 있습니다.




2

IE에 문제가 있거나 다른 사람들에게도 문제가 있습니다.

{
    float: left;
    width: 1px;
    height: 1px;
    background-color: transparent;
    border: none;
}

여전히 position : absolute를 사용하고 float는 레이아웃에 영향을 미칩니다.
SuperDuck

IE8이 position : absolute를 좋아하지 않는 것 같습니다. 제출하지 않습니다. 나는 다음을 사용한다 :
maxxyme

float: left;제거하면 제출과 동일 합니다.
maxxyme

2

당신은 또한 이것을 시도 할 수 있습니다

<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">

너비 / 높이 = 0 px 인 이미지를 포함 할 수 있습니다.


1
중요 : 올바른 이미지 URL을 사용해야 또는 파이어 폭스 페이지에서 "쿼리 전송"텍스트가 표시됩니다
PH를.

2
존재하는 이미지를 추가하고 높이와 너비를 0으로 설정하거나 존재하지 않는 이미지를 추가하는 경우 브라우저는 자원에 대한 GET 낭비 요청을 작성해야합니다.
pwdst

2

많은 UI 프레임 워크로 작업합니다. 그들 중 다수는 시각적으로 물건을 숨기는 데 사용할 수있는 내장 클래스를 가지고 있습니다.

부트 스트랩

<input type="submit" class="sr-only" tabindex="-1">

앵귤러 재질

<input type="submit" class="cdk-visually-hidden" tabindex="-1">

이 프레임 워크를 만든 훌륭한 마음은 이러한 스타일을 다음과 같이 정의했습니다.

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.cdk-visually-hidden {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
    outline: 0;
    -webkit-appearance: none;
    -moz-appearance: none;
}

1

문서 준비 기능에 추가했습니다. 양식에 제출 버튼이 없으면 (모든 Jquery 대화 상자 양식에 제출 버튼이 없음) 추가하십시오.

$(document).ready(function (){
    addHiddenSubmitButtonsSoICanHitEnter();
});
function addHiddenSubmitButtonsSoICanHitEnter(){
    var hiddenSubmit = "<input type='submit' style='position: absolute; left: -9999px; width: 1px; height: 1px;' tabindex='-1'/>";
    $("form").each(function(i,el){
        if($(this).find(":submit").length==0)
            $(this).append(hiddenSubmit);
    });
}

0
input.on('keypress', function(event) {
    if ( event.which === 13 ) {
        form.submit();
        return false;
    }
});

-2

나는 사용했다 :

<input class="hidden" type="submit" value="" 
onclick="document.getElementById('loginform').submit();"/>

과:

 .hidden {
        border:0;
        padding:0;
        font-size:0;
        width: 0px;
        height: 0px;
    }

.css 파일에서. 그것은 나를 위해 마술처럼 작동했습니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.