Gửi Gửi không phải là một chức năng Lỗi lỗi trong JavaScript


264

Bất cứ ai có thể cho tôi biết những gì đang xảy ra với mã này? Tôi đã cố gắng gửi biểu mẫu bằng JavaScript, nhưng lỗi ".submit không phải là một chức năng" được hiển thị. Xem bên dưới để biết thêm chi tiết về mã:

<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>

Tôi cũng đã thử điều này:

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

Cả hai đều cho tôi thấy cùng một lỗi :(


Trình duyệt nào cung cấp cho bạn thông báo này? Bạn có thể gửi nguồn hoàn chỉnh?
harto

Xem xét rằng mã được đăng hoạt động với tôi trong cả IE7 và Chrome2, thì có lẽ có gì đó không đúng trong mã bạn chưa đăng?
Lasse V. Karlsen

11
Có lẽ bạn có một trường có tên hoặc id gửi và do đó .submit () bị che khuất bởi trường đó?
Lasse V. Karlsen

lỗi đó xảy ra khi bạn có cùng id = "frm sản phẩm" trong các yếu tố khác nhau.
ID Optimaz

Câu trả lời:


736

gửi không phải là một chức năng

có nghĩa là bạn đã đặt tên cho nút gửi của bạn hoặc một số yếu tố khác submit. Đổi tên nút thành btnSubmitvà cuộc gọi của bạn sẽ hoạt động một cách kỳ diệu.

Khi bạn đặt tên cho nút gửi, bạn ghi đè submit()chức năng trên biểu mẫu.


55
Đây là một mẹo hữu ích. Nếu bạn bị kẹt với nút gửi của mình #submit, bạn có thể khắc phục bằng cách ăn cắp submit()phương thức của một thể hiện mẫu khác , ví dụ : document.createElement('form').submit.call(document.frmProduct).
Neil E. Pearson

35
Có vẻ như tất cả mọi người phải học điều này một cách khó khăn. Sẽ làm một câu hỏi phỏng vấn việc làm tốt
SeanDowney

9
Tôi chỉ cần xóa tên = 'gửi' và Bob là Dì của bạn, nó đã hoạt động !!
zzapper

2
Kinh ngạc tôi chưa bao giờ gặp phải điều này, nhưng than ôi, đó là vấn đề!
natebeaty

3
Tôi chỉ lãng phí 2-3 giờ của mình cho vấn đề này, cảm ơn rất nhiều vì câu trả lời
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>

EDIT: Tôi vô tình hoán đổi id xung quanh


document.getEuityById ("frm Productt"). submit không phải là một chức năng :(
Jin Yong

1
Bạn có nhiều hơn một yếu tố với id 'frmSản phẩm' không?
tvanfosson

Thêm submitAction như một trình xử lý cho onsubmit và sau đó gọi đệ trình từ nó có thể tạo ra một vòng lặp vô hạn. Trình xử lý nên được liên kết với onclick của nút.
tvanfosson

1
Hạ câu trả lời chính xác hả? những kẻ què quặt, bước lên chúng tôi để có được những điểm mà bạn đang bán linh hồn của mình
Chad Grant

@Chad Grant - Không thể đồng ý nhiều hơn.
Fenton

10

Đảm bảo rằng không có biểu mẫu nào khác có cùng tên và đảm bảo rằng không có tên = "submit" hoặc id = "submit" trong biểu mẫu.


9

Nếu bạn không có cơ hội để thay đổi, name="submit"bạn cũng có thể gửi biểu mẫu theo cách này:

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

5
HTMLFormElement.prototype.submit.call(form)cũng hoạt động
musa

5

Tôi gặp vấn đề tương tự khi tôi đang tạo một ứng dụng MVC bằng các trang chính. Đã thử tìm kiếm phần tử với 'gửi' như tên như đã đề cập ở trên nhưng không phải vậy.

Đối với trường hợp của tôi, nó đã tạo ra nhiều thẻ trên trang của tôi để có một số vấn đề liên quan đến hình thức chính xác.

Để giải quyết vấn đề này, tôi sẽ để nút xử lý đối tượng biểu mẫu nào sẽ sử dụng:

onclick="return SubmitForm(this.form)"

và với js:

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

3

Chủ đề này đã có rất nhiều câu trả lời, nhưng câu trả lời hay nhất (đơn giản nhất - một dòng!) Đối với tôi là một sửa đổi của nhận xét được thực hiện bởi Neil E. Pearson từ ngày 21 tháng 4 năm 2013:

Nếu bạn bị kẹt với nút gửi của mình là #submit, bạn có thể khắc phục bằng cách ăn cắp phương thức submit () của một thể hiện mẫu khác.

Sửa đổi phương pháp của tôi và những gì làm việc cho tôi:

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


2

cung cấp cho một phần tử biểu mẫu một tên của trình sẽ đơn giản che bóng thuộc tính trình. đảm bảo bạn không có thành phần biểu mẫu với tên gửi và bạn sẽ có thể truy cập chức năng gửi tốt.


2

Trên thực tế, giải pháp rất dễ dàng ...

Nguyên:

    <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>

Giải pháp:

    <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>

Bạn có thể giải thích làm thế nào điều này giải quyết vấn đề của OP.
Kingsley

Để chắc chắn, trong trường hợp này (chỉ trong trường hợp này) rắc rối là phạm vi.
Zurc Soirrab

1

Bạn nên sử dụng mã này:

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


Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Xin vui lòng cố gắng không làm đông mã của bạn với các bình luận giải thích, điều này làm giảm khả năng đọc của cả mã và các giải thích!
Filnor

0

Những gì tôi đã sử dụng là

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

Chỉ vì mọi thứ khác đã không làm việc.


0

Giải pháp cho tôi là đặt thuộc tính "biểu mẫu" của nút

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

hoặc là js:

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

0

Các giải pháp có thể -
1. Hãy chắc chắn rằng bạn không có bất kỳ yếu tố nào khác có tên / id là gửi.
2. Thử gọi hàm là onClick = "return submitAction();"
3.document.getElementById("form-name").submit();


-1

Bạn co thể thử

<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>

Bạn không có nhiều hơn một hình thức có cùng tên?


-1

Sử dụng getEuityById:

document.getElementById ('frmProduct').submit ()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.