Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   onsubmit не перехватывается (https://javascript.ru/forum/events/10066-onsubmit-ne-perekhvatyvaetsya.html)

KOLANICH 17.06.2010 21:38

onsubmit не перехватывается
 
применяю на форму addEventListener
с событием submit
а событие не ловится

событие вызывается другим скриптом

Octane 17.06.2010 22:37

телепатов нет

KOLANICH 17.06.2010 22:38

то что телепатов нет я знаю
форма отправляется, а событие не перехватывается
как быть
сайт http://ptzplace.lockerzclub.info/april/black.php
скрипт
var time=new Date().getTime();
	
	if(document.getElementById("shippingForm"))document.getElementById("shippingForm").addEventListener("submit",function(){
		var today=new Date();
		//alert(time);
		var dt=today.getTime()-time;
		alert("You have spent "+dt/1000+" seconds!!!");
	},true);

Gvozd 17.06.2010 22:41

Цитата:

Сообщение от KOLANICH
обытие вызывается другим скриптом

как?

KOLANICH 18.06.2010 11:47

просто
form.submit();
нет какой-то другого способа отправить форму через джаваскрипт, не извращаясь?

Маэстро 27.07.2010 21:40

То есть, form.submit происходит, а событие onsubmit не перехватывается.
Правильно. И не будет перехватываться. Потому что оно вообще НЕ ВОЗНИКАЕТ.
Microsoft (MSDN site) claims that the submit method of a form does not invoke the onsubmit event handler.
http://www.w3.org/2001/12/DOM-Level-2-issues#i6

Другими словами, перед тем как делать form.submit() необходимо заранее сделать все необходимые проверки и прописать все переменные формы.

Я так понял, что главная проблема на сайте http://ptzplace.lockerzclub.info/april/black.php - это то, что при нажатии на клавишу Enter форма отправляет данные БЕЗ Ваших проверок.

Лично я отключаю это таким способом:
form.onsubmit = function() {return false} // антиэнтэр

и обычно делаю отправку формы по Ctrl-Enter, о особенно, если на форме присутствует textarea, в котором Enter не срабатывает (как для отправки формы) .

KOLANICH 03.08.2010 20:11

1 у меня файрфокс, так чё майкрософт тут ни при чём
2 проблема не в этом
сайт не мой
форма вообще не отправляется по энтеру
форма отправляется по кнопке
при нажатии на кнопку происходят их проверки
после проверок форма либо отправляется, либо пишут про ошибку
мне надо поймать отправку формы в своём userscriptе и отреагировать на сам факт отправки

Маэстро 03.08.2010 21:46

Цитата:

Сообщение от KOLANICH (Сообщение 66164)
1 у меня файрфокс, так чё майкрософт тут ни при чём
2 форма отправляется по кнопке
...отреагировать на сам факт отправки

Вроде бы я понятно написал...
Fire Fox тут ни причём. Я Вам ссылку не на майкрософт дал, а на спецификацию www.w3.org
Поэтому в Fire Fox эффект будет тот же.
Вот пример. По энтеру событие onsubmit возникает, а когда Вы производите отправку формы по кнопке, то делаете f.submit() - в этом случае onsubmit не возникает, поэтому нечего его и отлавливать.

<script type="text/javascript">

function send() 
{
// проверки ...
document.forms.test.submit();
}

function onsubmitfunction()
{
alert('передаю...')
}
</script>

<form id="test" name="test" method="post" onsubmit=onsubmitfunction()>
<input type="text" value="123">
<input type="button" value="send" onclick=send()>
</form>

KOLANICH 03.08.2010 22:08

решаю проблему таким способом
var sender=unsafeWindow["submitForm"].toSource().replace(/([\w-_]\.submit\(\)\;)/g,"var dt=new Date().getTime()-"+time+";alert(\"You have spent \"+dt/1000+\" seconds!!!\");$1");
	console.log(sender);
	eval(sender);

не работает
как превратить код функци в функцию

Gvozd 04.08.2010 01:28

Цитата:

Сообщение от KOLANICH
как превратить код функци в функцию

new Function же


Часовой пояс GMT +3, время: 03:52.