ข้อผิดพลาด“ การส่งไม่ใช่ฟังก์ชัน” ใน JavaScript


264

ใครสามารถบอกฉันว่าเกิดอะไรขึ้นกับรหัสนี้ ฉันพยายามส่งฟอร์มด้วย JavaScript แต่มีข้อผิดพลาด ".submit ไม่ใช่ฟังก์ชัน" ปรากฏขึ้น ดูด้านล่างสำหรับรายละเอียดเพิ่มเติมของรหัส:

<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
บางทีคุณอาจมีฟิลด์ที่มีชื่อหรือรหัสที่ส่งดังนั้นจึง. submit () เป็นเงาของฟิลด์นั้นหรือไม่
Lasse V. Karlsen

ข้อผิดพลาดนั้นเกิดขึ้นเมื่อคุณมี id = "frmProduct" เดียวกันในองค์ประกอบต่างๆ
Optimaz ID

คำตอบ:


736

ส่งไม่ใช่ฟังก์ชั่น

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 ชั่วโมงสำหรับปัญหานี้ขอบคุณมากสำหรับคำตอบ
Mehul Prajapati

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>

แก้ไข: ฉันตั้งใจเปลี่ยนรหัสรอบ


. document.getElementById ( "frmProduct") ส่งไม่ได้เป็นฟังก์ชั่น :(
กิมย้ง

1
คุณมีองค์ประกอบมากกว่าหนึ่งรายการด้วยรหัส 'frmProduct' หรือไม่
tvanfosson

การเพิ่ม sendAction เป็นตัวจัดการสำหรับ onsubmit จากนั้นจึงเรียกใช้ส่งจากมันอาจสร้างวงวนไม่สิ้นสุด ตัวจัดการควรเชื่อมโยงกับปุ่มคลิก
tvanfosson

1
Downvoting คำตอบที่ถูกต้องใช่มั้ย พวกง่อยก้าวมาหาเราเพื่อรับคะแนนที่คุณขายให้กับดวงวิญญาณของคุณ
ชาดแกรนท์

@Chad Grant - ไม่สามารถเห็นด้วยเพิ่มเติม
เฟนตัน

10

ตรวจสอบให้แน่ใจว่าไม่มีแบบฟอร์มอื่นที่มีชื่อเดียวกันและตรวจสอบให้แน่ใจว่าไม่มีชื่อ = "ส่ง" หรือ id = "ส่ง" ในแบบฟอร์ม


9

หากคุณไม่มีโอกาสเปลี่ยนแปลงname="submit"คุณสามารถส่งแบบฟอร์มด้วยวิธีนี้:

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

5
HTMLFormElement.prototype.submit.call(form)ยังใช้ได้
musa

5

ฉันมีปัญหาเดียวกันเมื่อฉันสร้างแอปพลิเคชัน MVC ที่ใช้กับเพจต้นแบบ พยายามมองหาองค์ประกอบที่มี 'ส่ง' เป็นชื่อตามที่ระบุไว้ข้างต้น แต่ไม่ใช่ในกรณีนี้

สำหรับกรณีของฉันมันสร้างแท็กหลายแท็กในหน้าของฉันดังนั้นจึงมีปัญหาบางอย่างที่อ้างอิงถึงรูปแบบที่ถูกต้อง

เพื่อหลีกเลี่ยงปัญหานี้ฉันจะให้ปุ่มจัดการกับวัตถุรูปแบบที่จะใช้:

onclick="return SubmitForm(this.form)"

และด้วย js:

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

3

หัวข้อนี้มีคำตอบมากมายอยู่แล้ว แต่สิ่งที่ดีที่สุด (และง่ายที่สุด - หนึ่งบรรทัด!) สำหรับฉันคือการดัดแปลงความคิดเห็นที่ทำโดย Neil E. Pearson จาก 21 เม.ย. 2013:

หากคุณติดอยู่กับปุ่มส่งของคุณเป็น #submit คุณสามารถหลีกเลี่ยงได้โดยการขโมยเมธอด submit () ของฟอร์มอื่น

การดัดแปลงของฉันเป็นวิธีการของเขาและสิ่งที่ได้ผลสำหรับฉัน:

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


2

ให้องค์ประกอบแบบฟอร์มชื่อของการส่งจะง่ายเงาคุณสมบัติการส่ง ตรวจสอบให้แน่ใจว่าคุณไม่มีองค์ประกอบของฟอร์มที่มีชื่อส่งและคุณควรจะสามารถเข้าถึงฟังก์ชั่นส่งได้ดี


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. ตรวจสอบให้แน่ใจว่าคุณไม่มีองค์ประกอบอื่น ๆ ที่มีชื่อ / รหัสว่าส่ง
2. ลองเรียกใช้ฟังก์ชันเป็นonClick = "return submitAction();"
3document.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.