제출 버튼이 비활성화된 경우 텍스트 입력란에서 Enter 키를 누르면 양식이 어떻게 되는지

2549 단어 HTMLRails
제출 버튼이 비활성화되었을 때 텍스트 입력란에서 Enter 키를 누르면 양식이 어떻게 동작합니까?

Chrome 및 Firefox에서 시도하면 양식이 제출되지 않습니다. 그런데 Safari(macOS도 iOS도)에서는 전송되어 버립니다. Rails적으로 말하면 data-disable-with를 사용하는 것만으로는 폼의 이중 전송을 막지 않는다는 것입니다.

이 거동은 HTML 사양에서는 어떻게 됩니까? 구구했는데, Stack Overflow에서 다음과 같은 설명에 갔습니다.
  • h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 5629805 / ぢ さ b

  • Consequently, if the default button is disabled, the form is not submitted when such an implicit submission mechanism is used. (A button has no activation behavior when disabled.)
    htps //w w. w3. rg/TR/HTML5/Frms. html # mp

    「폼은 제출되지 않는다」가 HTML5의 사양으로, Safari는 잘못되어 있는 것 같습니다.

    현재의 사양서인 HTML Living Standard 를 보자. 텍스트 입력란에서 Enter를 누르는 이야기는 「4.10 Forms」의 「4.10.21.2 Implicit submission」(암묵의 제출)이라는 항에 적혀 있습니다.
  • 4.10.21.2 Implicit submission

  • "Consequently, if the default button is disabled, the form is not submitted when such an implicit submission mechanism is used."부분이 없습니다.

    HTML Living Standard 의 텍스트는 Github의 저장소 로 관리되고 있습니다. 「Implicit submission」에 「Consequently...」의 문장이 있는지 없는지로 시기를 짜서 찾아가자, 다음의 커밋을 발견했습니다.
  • Align activation behavior with changes to DOM Standard

  • 2016년 10월 21일에 "Consequently..."문장이 지워졌습니다. 그 이유는 관련 Issue 등을 조사하는 히마가 없기 때문에 모릅니다.

    결론:

    제출 버튼이 비활성화되면 Enter를 눌러도 양식이 제출되지 않는다는 결정은 HTML 사양 (HTML Living Standard)에 없습니다 (이전에는 있었다). Safari는 틀리지 않다.

    대책:
  • JavaScript에서 submit 이벤트를 처리하고, disabled일 때는 preventDefault한다.
  • Enter 키를 비활성화합니다. input 요소의 keydown 또는 keypress 이벤트를 처리하여 preventDefault합니다.
  • form 요소를 사용하지 않고 모두 Ajax로 전송합니다.

  • 나에게는 1.을 좋아하지만, 다른 사람에게는 알기 어렵다. 2.는 알기 쉽지만, 괄호 나쁜 생각이 든다.

    좋은 웹페이지 즐겨찾기