복붙노트

[JQUERY] jQuery를 serializeArray는 클릭 된 버튼을 제출 포함되지 않습니다

JQUERY

jQuery를 serializeArray는 클릭 된 버튼을 제출 포함되지 않습니다

해결법


  1. 1.(가) 아닌 버튼, 예를 들어,
    의 이벤트 제출에, 동작은이 기반되지 입력 타격 또는 자바 스크립트 () .submit를 호출. 당신은 또는 버튼 클릭으로 아무 상관이있을 수도 있고 없을 수도 있습니다, 여기에 .serialize을 () 또는 .serializeArray ()이 개념을 혼합하고 - 그것은 모두, 그들이 연결되지 않은 단지 별도의 이벤트입니다. 보다 높은 수준에서 이러한 방법은 : 당신은 어떤 이유로 든 형태 (또는 그 일부)를 직렬화 할 수 있습니다.

    (가) 아닌 버튼, 예를 들어, 의 이벤트 제출에, 동작은이 기반되지 입력 타격 또는 자바 스크립트 () .submit를 호출. 당신은 또는 버튼 클릭으로 아무 상관이있을 수도 있고 없을 수도 있습니다, 여기에 .serialize을 () 또는 .serializeArray ()이 개념을 혼합하고 - 그것은 모두, 그들이 연결되지 않은 단지 별도의 이벤트입니다. 보다 높은 수준에서 이러한 방법은 : 당신은 어떤 이유로 든 형태 (또는 그 일부)를 직렬화 할 수 있습니다.

    당신은 그러나 그 버튼에서 제출 정상적인 형태와 같은 이름 / 값 쌍을 제출 추가 할 수있는 것, 당신은 예를 들어 버튼에서 제출하는 경우 :

    $("#mySubmit").click(function() {
      var formData = $(this).closest('form').serializeArray();
      formData.push({ name: this.name, value: this.value });
      //now use formData, it includes the submit button
    });
    

  2. 2.상당히 깔끔한 방법이 문제를 해결하기 위해 :

    상당히 깔끔한 방법이 문제를 해결하기 위해 :

    <form>
        <input type="hidden" name="stuff" value="">
        <button type="submit" onclick="this.form.stuff.value=this.value" value="reset">reset</button>
        <button type="submit" onclick="this.form.stuff.value=this.value" value="delete">delete</button>
    </form>
    

  3. 3.나는 다음 코드를 사용하여, 기본적으로 같은 이름을 가진 숨겨진 요소를 추가

    나는 다음 코드를 사용하여, 기본적으로 같은 이름을 가진 숨겨진 요소를 추가

     var form = $("form");
     $(":submit",form).click(function(){
                if($(this).attr('name')) {
                    $(form).append(
                        $("<input type='hidden'>").attr( { 
                            name: $(this).attr('name'), 
                            value: $(this).attr('value') })
                    );
                }
            });
    
     $(form).submit(function(){
         console.log($(this).serializeArray());
     });
    

  4. 4.이 솔루션은 제출에 양식 변수로 각각 전달, 모든 입력을 제출을 처리 할 같이 '보편적'입니다.

    이 솔루션은 제출에 양식 변수로 각각 전달, 모든 입력을 제출을 처리 할 같이 '보편적'입니다.

    $(document).ready(function(){
        $('input:submit').each(function(){
            $(this).click(function(){
                var formData = $(this).closest('form').serializeArray();
                formData.push({ name: $(this).attr('name'), value: $(this).val() });
            });
        });
    });
    

  5. 5.

        var form = button.closest('form');
        var serialize = form.serialize();
    
        if (button.attr('name') !== undefined) {
            serialize += '&'+button.attr('name')+'=';
        }
    
  6. from https://stackoverflow.com/questions/4007942/jquery-serializearray-doesnt-include-the-submit-button-that-was-clicked by cc-by-sa and MIT license