В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:
if (!name) {
name = async1();
}
async2(name);
. В итоге вы пройдете через async1
; проверьте, не определено ли name
или нет, и соответственно вызовите обратный вызов.
async1(name, callback) {
if (name)
callback(name)
else {
doSomething(callback)
}
}
async1(name, async2)
Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок. Вы можете проверить проект здесь . Fibers
помогает в решении проблемы. var Fiber = require('fibers')
function async1(container) {
var current = Fiber.current
var result
doSomething(function(name) {
result = name
fiber.run()
})
Fiber.yield()
return result
}
Fiber(function() {
var name
if (!name) {
name = async1()
}
async2(name)
// Make any number of async calls from here
}
submit не является функцией
blockquote>означает, что вы назвали вашу кнопку отправки или какой-либо другой элемент
submit
. Переименуйте кнопку вbtnSubmit
, и ваш звонок будет волшебным образом работать.Когда вы называете кнопку submit, вы переопределяете функцию
submit()
в форме.
, давая элементу формы имя submit, будет просто теневое свойство submit. убедитесь, что у вас нет элемента формы с именем submit, и вы должны иметь доступ к функции отправки просто отлично.
<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: я случайно поменял идентификатор вокруг
Вы можете попробовать
<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>
У вас нет более одной формы с тем же именем?
Убедитесь, что нет другой формы с тем же именем и убедитесь, что в форме нет имени = "submit" или id = "submit".
Использовать getElementById:
document.getElementById ('frmProduct').submit ()
В этой теме уже много ответов, но тот, который лучше всего работал (и простейший - одна строка!) для меня, был модификацией комментария Нила Э. Пирсона от 21 апреля 2013 года:
< blockquote>Если вы застряли в своей кнопке отправки #submit, вы можете обойти ее, украв другой метод экземпляра экземпляра формы ().
blockquote>Мое изменение в его методе, и что сработало для меня:
document.createElement('form').submit.call(document.getElementById(frmProduct));
Решение для меня заключалось в том, чтобы установить атрибут «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();
У меня была такая же проблема, когда я создавал приложение MVC, используя мастер-страницы. Пробовал искать элемент с 'submit' как имена, упомянутые выше, но это было не так.
В моем случае он создал несколько тегов на моей странице, поэтому возникли некоторые проблемы, ссылающиеся на правильную форму.
Чтобы обойти это, я позволю кнопке дескриптор, который будет использовать объект формы :
onclick="return SubmitForm(this.form)"
и с js:
function SubmitForm(frm) {
frm.submit();
}
Возможные решения - 1. Убедитесь, что у вас нет другого элемента с именем / id как submit. 2. Попробуйте вызвать функцию как onClick = "return submitAction();"
3. document.getElementById("form-name").submit();
Я использовал
var enviar = document.getElementById("enviar");
enviar.type = "submit";
Просто потому, что все остальное не работало.
Если у вас нет возможности изменить name="submit"
, вы также можете отправить форму следующим образом:
function submitForm(form) {
var submitFormFunction = Object.getPrototypeOf(form).submit;
submitFormFunction.call(form);
}