자바 스크립트에서 양식 제출 이벤트를 수신하려면 어떻게해야합니까?


124

내 양식 유효성 검사 자바 스크립트 라이브러리를 작성하고 싶습니다 .Google에서 제출 버튼이 클릭되었는지 감지하는 방법을 찾고 있었지만 내가 찾은 것은 onSubmit="function()"HTML에서 onClick을 사용해야하는 코드뿐입니다 .

onSubmit 또는 onClick javascript를 추가하는 것과 같은 HTML 코드를 만질 필요가 없도록이 자바 스크립트를 만들고 싶습니다.


8
왜 안돼 document.forms['yourForm'].onsubmit = function(){}? 아니면 addEventListener?
Joseph Silber 2011 년

3
제출 버튼이 클릭되었는지 확인 하시겠습니까? 아니면 사용자가 양식을 제출할 때 확인 하시겠습니까 (버튼을 클릭하거나 필드 중 하나에서 Enter를 눌러 수행 할 수 있음)?
nnnnnn

답변:


506

왜 사람들은 필요하지 않을 때 항상 jQuery를 사용합니까?
사람들은 왜 단순한 JavaScript를 사용할 수 없습니까?

var ele = /*Your Form Element*/;
if(ele.addEventListener){
    ele.addEventListener("submit", callback, false);  //Modern browsers
}else if(ele.attachEvent){
    ele.attachEvent('onsubmit', callback);            //Old IE
}

callback 양식이 제출 될 때 호출하려는 함수입니다.

에 대해 EventTarget.addEventListener, MDN에서이 문서를 확인하세요. .

네이티브 submit이벤트 를 취소하려면 (양식 제출 방지) .preventDefault()콜백 함수에서 사용 합니다.

document.querySelector("#myForm").addEventListener("submit", function(e){
    if(!isValid){
        e.preventDefault();    //stop form from submitting
    }
});

submit도서관 에서 이벤트 듣기

어떤 이유로 라이브러리가 필요하다고 결정한 경우 (이미 하나를 사용하고 있거나 브라우저 간 문제를 처리하지 않으려는 경우) 다음은 공통 라이브러리에서 제출 이벤트를 수신하는 방법 목록입니다.

  1. jQuery

    $(ele).submit(callback);

    ele양식 요소 참조는 어디에 callback있으며 콜백 함수 참조가됩니다. 참고

  1. AngularJS (1.x)

    <form ng-submit="callback()">
    
    $scope.callback = function(){ /*...*/ };

    컨트롤러$scope 내부의 프레임 워크에서 제공하는 범위는 매우 간단 합니다 . 참고

  2. 반응

    <form onSubmit={this.handleSubmit}>
    
    class YourComponent extends Component {
        // stuff
    
        handleSubmit(event) {
            // do whatever you need here
    
            // if you need to stop the submit event and 
            // perform/dispatch your own actions
            event.preventDefault();
        }
    
        // more stuff
    }

    핸들러를 onSubmit소품에 전달하기 만하면 됩니다. 참고

  3. 기타 프레임 워크 / 라이브러리

    프레임 워크 문서를 참조하십시오.


확인

JavaScript에서 항상 유효성 검사를 수행 할 수 있지만 HTML5에는 기본 유효성 검사도 있습니다.

<!-- Must be a 5 digit number -->
<input type="number" required pattern="\d{5}">

JavaScript도 필요하지 않습니다! 네이티브 유효성 검사가 지원되지 않을 때마다 JavaScript 유효성 검사기로 대체 할 수 있습니다.

데모 : http://jsfiddle.net/DerekL/L23wmo1L/


106
그 5 줄의 "무섭다 ... 못생긴"코드는 4,000 줄의 jQuery가 제공하는 필수 기능을 대체합니다.이 역시 "엄청나게 ... 못생긴"코드 여야합니다.
RobG 2011 년

45
나는 jQuery에 대해 많은 것을 가지고 있지 않다. 단지 몇 줄의 코드로 전체를 대체 할 수 있다는 것을 깨닫지 못하고 그것을 일종의 마법 주문으로 사용하는 사람들 만있다. 시간을내어 브라우저가 실제로 어떻게 작동하는지 알아보십시오. 정말 그렇게 어렵지 않습니다.
RobG

4
@Ben-라이브러리로 무언가를 할 수 있다고해서 "그냥 라이브러리 x를 사용하라"는 답장으로 다른 사람들이 기본 사항을 배우지 못하도록 설득해서는 안됩니다. 누군가가 자바 스크립트에 대한 구체적인 질문을 할 때 평범한 자바 스크립트를 사용하여 질문에 대답하는 것이 정중합니다. 꼭 선택한 라이브러리에서 무언가를 제안하되 질문에 대답하는 것이 최우선 과제 여야합니다.
RobG 2011 년

4
저는 개인적으로 기본을 먼저 알아야한다고 생각합니다.
데릭朕會功夫

7
같은 정신으로 더 많은 어셈블리 언어를 작성해야합니다. 반 농담 (저는 jquery 솔루션을 선호하며 내부에서 무슨 일이 일어나고 있는지 정말로 이해하고 싶다면 끝없는 토끼 구멍이라고 생각합니다 ), 그렇습니다. 어셈블리 언어를 알고 있고 TCP가 어떻게 작동하는지 알고 기쁩니다. 연결 등이 이루어집니다. 나는 그들에게 단지 내부의 경이로움을 가르치기 위해 누구에게도 낮은 수준의 해결책을주지 않을 것입니다.
Josh Sutterfield 2016

6

이것이 onSubmit발생 했을 때 자신의 자바 스크립트 함수를 호출 할 수있는 가장 간단한 방법 입니다.

HTML

<form>
    <input type="text" name="name">
    <input type="submit" name="submit">
</form>

자바 스크립트

window.onload = function() {
    var form = document.querySelector("form");
    form.onsubmit = submitted.bind(form);
}

function submitted(event) {
    event.preventDefault();
}

3
'제출 된'함수를 바인딩하기로 결정한 이유는 무엇입니까? 함수에서 'this'를 사용하지 않습니다.
Lior

bind실제로 불필요합니다.
pstadler

3

요구 사항에 따라 jQuery와 같은 라이브러리없이 다음을 수행 할 수도 있습니다.

이것을 머리에 추가하십시오.

window.onload = function () {
    document.getElementById("frmSubmit").onsubmit = function onSubmit(form) {
        var isValid = true;
        //validate your elems here
        isValid = false;

        if (!isValid) {
            alert("Please check your fields!");
            return false;
        }
        else {
            //you are good to go
            return true;
        }
    }
}

양식은 여전히 ​​다음과 같이 보일 수 있습니다.

    <form id="frmSubmit" action="/Submit">
        <input type="submit" value="Submit" />
    </form>

9
addEventListener다른 개발자가 자신의 리스너를 추가 할 수 있도록 항상 onsubmit 또는 onload 대신 사용 하십시오.
beytarovski jul.

0

jQuery 사용 :

$('form').submit(function () {
    // Validate here

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