JavaScript에서 "제출이 함수가 아닙니다"오류


263

누구 든지이 코드에 어떤 문제가 있는지 말해 줄 수 있습니까? JavaScript로 양식을 제출하려고했지만 ".submit is a function"오류가 표시되었습니다. 코드에 대한 자세한 내용은 아래를 참조하십시오.

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction()" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

나는 또한 이것을 시도했다 :

<script type="text/javascript">
    function submitAction()
    {
        document.forms["frmProduct"].submit();
    }
</script>

둘 다 같은 오류를 보여줍니다 :(


어떤 브라우저에서이 메시지를 제공합니까? 완전한 소스를 게시 할 수 있습니까?
harto

게시 된 코드가 IE7과 Chrome2에서 모두 작동한다고 생각하면 게시하지 않은 코드에 문제가 있습니까?
Lasse V. Karlsen

11
아마도 당신은 이름이나 id submit을 가진 필드를 가지고 있고 따라서 .submit ()은 그 필드에 의해 숨겨져 있습니까?
Lasse V. Karlsen

다른 요소에 동일한 id = "frmProduct"가있을 때이 오류가 발생했습니다.
Optimaz ID

답변:


735

제출은 기능이 아닙니다

제출 버튼 또는 다른 요소의 이름을 지정했음을 의미합니다 submit. 버튼 이름을btnSubmit 통화가 마술처럼 작동합니다.

제출 단추의 이름을 지정 submit()하면 양식 의 기능 이 대체 됩니다.


55
유용한 트릭이 있습니다. 제출 버튼이 붙어있는 경우 #submit다른 양식 인스턴스의 submit()메소드를 훔쳐서 해결할 수 있습니다 ( 예 :) document.createElement('form').submit.call(document.frmProduct).
Neil E. Pearson

35
모두가이 방법을 어려운 방법으로 배워야 할 것 같습니다. 좋은 면접 질문을 할 것입니다
SeanDowney

9
나는 단순히 이름 = '제출'을 제거하고 밥은 당신의 아줌마가 작동했습니다!
zzapper

2
나는 결코 이것에 부딪치지 않았지만 놀랐다. 아아, 그것은 문제였다!
natebeaty

3
나는이 문제에 대해 2-3 시간을 낭비했다. 답변에 대해 많은 감사를
전한다

12
<form action="product.php" method="post" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">

document.getElementById("submit_value").onclick = submitAction;

function submitAction()
{
    document.getElementById("frmProduct").submit();
    return false;
}
</script>

편집 : 실수로 ID를 바꿔 놓았습니다.


document.getElementById ( "frmProduct"). submit은 함수가 아닙니다 :(
Jin Yong

1
ID가 'frmProduct'인 요소가 두 개 이상 있습니까?
tvanfosson

submitAction을 onsubmit의 핸들러로 추가 한 후 제출을 호출하면 무한 루프가 작성 될 수 있습니다. 핸들러는 버튼 클릭시 연결되어야합니다.
tvanfosson

1
정확한 답변을 공로 피하는가? 절름발이, 당신의 영혼을 팔고있는 포인트를 얻기 위해 우리를 밟아 라
Chad Grant

@ 채드 그랜트-더 동의하지 못했습니다.
Fenton

10

이름이 같은 다른 양식이 없는지 확인하고 양식에 name = "submit"또는 id = "submit"이 없는지 확인하십시오.


9

변경할 기회가없는 경우 다음과 같이 name="submit"양식을 제출할 수도 있습니다.

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}

5
HTMLFormElement.prototype.submit.call(form)또한 작동
musa

5

마스터 페이지를 사용하여 MVC 응용 프로그램을 만들 때도 동일한 문제가 발생했습니다. 위에서 언급 한 바와 같이 이름으로 'submit'을 가진 요소를 찾으려고 시도했지만 그렇지 않았습니다.

내 경우에는 내 페이지에 여러 개의 태그를 만들었으므로 올바른 양식을 참조하는 데 문제가있었습니다.

이 문제를 해결하려면 사용할 양식 객체를 버튼이 처리하도록하십시오.

onclick="return SubmitForm(this.form)"

그리고 js와 함께 :

function SubmitForm(frm) {
    frm.submit();
}

3

이 주제에는 이미 많은 답변이 있지만 2013 년 4 월 21 일부터 Neil E. Pearson의 의견이 수정되었습니다.

제출 버튼이 #submit 인 경우 다른 양식 인스턴스의 submit () 메소드를 도용하여 해결할 수 있습니다.

그의 방법에 대한 나의 수정과 나를 위해 일한 것 :

document.createElement('form').submit.call(document.getElementById(frmProduct));


2

양식 요소에 제출 이름을 지정하면 제출 속성이 단순하게 표시됩니다. 이름이 submit 인 양식 요소가없고 제출 기능에 제대로 액세스 할 수 있어야합니다.


2

실제로 솔루션은 매우 쉽습니다 ...

실물:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct"
enctype="multipart/form-data">
    <input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">
</form>
<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

해결책:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct" 
enctype="multipart/form-data">
</form>

<!-- Place the button here -->
<input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

이것이 OP 문제를 해결하는 방법을 설명해 주시겠습니까?
Kingsley

확실히이 경우 (이 경우에만) 문제가 범위입니다.
Zurc Soirrab

1

이 코드를 사용해야합니다 :

$(document).on("ready", function () {
       
        document.frmProduct.submit();
    });


이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자들에게 질문에 대한 답변을 제공하므로 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다. 설명 주석으로 코드를 복잡하게 만들지 마십시오. 코드와 설명의 가독성이 떨어집니다!
Filnor

0

내가 사용한 것은

var enviar = document.getElementById("enviar");
enviar.type = "submit"; 

다른 모든 것이 작동하지 않았기 때문입니다.


0

나를위한 해결책은 버튼의 "양식"속성을 설정하는 것이 었습니다

<form id="form_id_name"><button name="btnSubmit" form="form_id_name" /></form>

또는 js입니다.

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();

0

가능한 해결 방법-1
. 제출할 이름 / ID가 다른 요소가 없는지 확인하십시오.
2. 함수를 onClick = "return submitAction();"
3 으로 호출하십시오 .document.getElementById("form-name").submit();


-1

당신은 시도 할 수 있습니다

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction(this)" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
function submitAction(element)
{
    element.form.submit();
}
</script>

이름이 같은 양식이 두 개 이상 없습니까?


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