Ошибка «Отправить не является функцией» в JavaScript


264

Может кто-нибудь сказать мне, что происходит с этим кодом? Я попытался отправить форму с помощью JavaScript, но показалась ошибка «.submit is not 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, возможно, что-то не так в коде, который вы не опубликовали?
Лассе В. Карлсен

11
Возможно, у вас есть поле с именем или идентификатором submit, и поэтому .submit () скрывается этим полем?
Лассе В. Карлсен

эта ошибка произошла, когда у вас есть один и тот же id = "frmProduct" в разных элементах.
Оптимаз ID

Ответы:


736

отправить не функция

означает, что вы назвали свою кнопку отправки или какой-либо другой элемент submit. Переименуйте кнопку в, btnSubmitи ваш звонок будет волшебным образом работать.

Когда вы называете кнопку «Отправить», вы переопределяете submit()функцию в форме.


55
Вот полезный трюк. Если вы застряли с кнопкой представить существо #submit, вы можете обойти его, украв другую форму экземпляра submit()метода, например: document.createElement('form').submit.call(document.frmProduct).
Нил Э. Пирсон

35
Кажется, каждый должен выучить этот трудный путь.
Сделал

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>

РЕДАКТИРОВАТЬ: я случайно поменял удостоверение личности вокруг


document.getElementById ("frmProduct"). submit не является функцией :(
Jin Yong

1
У вас есть более одного элемента с идентификатором «frmProduct»?
tvanfosson

Добавление submitAction в качестве обработчика для onsubmit и последующий вызов submit из него может создать бесконечный цикл. Обработчик должен быть связан с нажатием кнопки.
tvanfosson

1
Понижение точных ответов, да? Хромые парни, наступите на нас, чтобы получить те очки, за которые вы продаете свои души
Чед Грант

@ Чед Грант - Не могу согласиться.
Фентон

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)также работает
Муса

5

У меня была такая же проблема, когда я создавал приложение MVC, используя главные страницы. Попытка поиска элемента с 'submit' в качестве имен, как указано выше, но это не так.

В моем случае это создало несколько тегов на моей странице, поэтому возникли проблемы со ссылкой на правильную форму.

Чтобы обойти это, я позволю кнопке определять, какой объект формы использовать:

onclick="return SubmitForm(this.form)"

и с JS:

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

3

В этой теме уже есть много ответов, но тот, который работал лучше (и самый простой - одна строка!) Для меня, был модификацией комментария, сделанного Нилом Э. Пирсоном от 21 апреля 2013 года:

Если вы застряли с кнопкой отправки #submit, вы можете обойти ее, украдя метод submit () другого экземпляра формы.

Моя модификация его метода, и что сработало для меня:

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


2

присвоение элементу формы имени submit просто затеняет свойство submit. убедитесь, что у вас нет элемента формы с именем submit, и у вас должна быть возможность получить доступ к функции 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>

Можете ли вы объяснить, как это решает проблему ОП.
Кингсли

Конечно, в этом случае (только в этом случае) проблема заключается в объеме.
Zurc Soirrab

1

Вы должны использовать этот код:

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


Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Также постарайтесь не переполнять ваш код пояснительными комментариями, это снижает удобочитаемость кода и пояснений!
Филнор

0

Что я использовал

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

Просто потому, что все остальное не сработало.


0

Решением для меня было установить атрибут "form" кнопки

<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();"
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>

У вас нет более одной формы с одним и тем же именем?


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.