Помилка "Надіслати - це не функція" у JavaScript


263

Хто-небудь може сказати мені, що не так з цим кодом? Я спробував подати форму з JavaScript, але показана помилка ". Підписати не функція". Детальніше про код див. Нижче:

<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
Можливо, у вас є поле з ім'ям або id submit і, таким чином .submit () є затіненим цим полем?
Лассе В. Карлсен

ця помилка сталася, коли у вас однаковий id = "frmProduct" у різних елементах.
Optimaz ID

Відповіді:


735

подати - це не функція

означає, що ви назвали кнопку подання або інший елемент submit. Перейменуйте кнопку наbtnSubmit і ваш дзвінок магічно спрацює.

Коли ви називаєте кнопку подання, ви змінюєте submit()функцію на формі.


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

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>

EDIT: Я випадково обміняв ідентифікатор навколо


document.getElementById ("frmProduct"). подати не є функцією :(
Jin Yong

1
У вас є більше одного елемента з ідентифікатором 'frmProduct'?
tvanfosson

Додавання submitAction як обробник для підписки, а потім виклик подання з нього може створити нескінченний цикл. Обробник повинен бути пов'язаний з натисканням кнопки.
tvanfosson

1
Схиляючись до точних відповідей, так? кульгаві хлопці, наступайте на нас, щоб отримати ті очки, за які ви продаєте свої душі
Чад Грант

@Chad Grant - Не можу погодитися більше.
Фентон

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 за допомогою головних сторінок. Спробував шукати елемент з «подати» як імена, як згадувалося вище, але це було не так.

У моєму випадку він створив кілька тегів на моїй сторінці, тому виникли проблеми, що посилаються на правильну форму.

Щоб вирішити це, я дозволяю кнопці обробляти, який об’єкт форми використовувати:

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

Надання елемента форми імені подання буде просто затінювати властивість представити. переконайтеся, що у вас немає елемента форми з надісланням імені, і ви повинні мати можливість отримати доступ до функції подання.


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.