2015-05-26 10 views
1

Проблема, с которой я столкнулся, заключается в том, что я понятия не имею, почему событие отправки невозможно передать, если форма отправлена ​​через Javascript.отправить событие не было зарегистрировано при отправке через javascript

Код:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
</head> 
<body> 
    <form id="formA"> 
     <input type="text" id="name" value="test"/> 
     <input type="button" id="btn" value="submit by js"/> 
     <input type="submit" id="btn2" value="submit directly"/> <!-- event can be triggered --> 
    </form> 
</body> 
<script type="text/javascript"> 
    document.getElementById("formA").addEventListener("submit", function() { 
     console.log("form is submitted"); // no effect if submitting by js. WHY? 
    }); 
    document.getElementById("btn").addEventListener("click", function() { 
     document.getElementById("formA").submit(); 
    }); 
</script> 
</html> 
+0

как проверен код не работает, вы попробовали 'return false', внизу в' call' функцию обратного вызова. – Girish

+0

Спасибо. Я пытался. Это невозможно. –

ответ

1

Я считаю, что это правильный ответ:

Это ожидаемое поведение формы:

отправки метода не вызывается onsubmit обработчика событий.

Ссылка: Microsoft - Event handler parameters

Другими словами, когда форма была отправлена ​​программно onsubmit событие не сработает. Это срабатывает только при нажатии кнопки отправки. И это то, что я наблюдал, когда я тестировал код OP.

OP также выводит сообщение на консоль, чтобы проверить, была ли форма отправлена. Однако для просмотра этого сообщения необходимо будет сохранить консоль. Если это не разрешено, журнал консоли будет очищен при отправке формы (что означает, что сообщение не было напечатано).

document.getElementById("formA").addEventListener("submit", function() { 
    console.log("form is submitted"); 
}); 
+0

Спасибо. На основе предоставленного ключевого слова я нашел [один и тот же вопрос] (http://stackoverflow.com/questions/12819357/form-submitted-using-submit-from-a-link-cannot-be-caught-by-onsubmit- обработчик) на SO. –

1

Вы можете применить трюк, чтобы захватить представить события на нажатие кнопки, при нажатии кнопки клиент вы можете добавить событие щелчка на submit, он также будет работать так же, что вы хотите для того чтобы достигнуть

document.getElementById("formA").addEventListener("submit", function() { 
 
    alert("form is submitted"); // no effect if submitting by js. WHY? 
 
    }); 
 
    document.getElementById("btn").addEventListener("click", function() { 
 
    document.getElementById("btn2").click(); 
 
    });
<form id="formA" name="formA" action="#"> 
 
    <input type="text" id="name" value="test" /> 
 
    <input type="button" id="btn" value="submit by js" /> 
 
    <input type="submit" id="btn2" value="submit directly" /> 
 
    <!-- event can be triggered --> 
 
</form>

+0

Это хороший способ. – R3tep

Смежные вопросы