powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Правильно внедриться/перехватить
24 сообщений из 24, страница 1 из 1
Правильно внедриться/перехватить
    #35085715
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла необходимость перехватить submit().
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
	<head>
		<script type="text/javascript">
<!--
var
	OrgSubmit;
	
function DoOnSubmit()
{
	alert("DoOnSubmit()");
	alert("typeof(OrgSubmit)=\""+typeof(OrgSubmit)+"\"");
	OrgSubmit();
}

function CaptureSubmit()
{
	var
		Ctrl;
		
	if(Ctrl=document.forms["TestAutoPostBackIForm"])
	{
		OrgSubmit=Ctrl.submit;
		Ctrl.submit=DoOnSubmit;
	}
}
// -->
		</script>
	</head>
	<body onload="CaptureSubmit()">
В M$ IE 6.0.2800.1106+SP1 все, вроде, сухо: при вызове document.forms["TestAutoPostBackIForm"].submit() в начале дергается DoOnSubmit(), а, затем, происходит сабмит на сервер. Но осел - не показатель. А, вот, в Mozilla 1.7.13, Mozilla Firefox 2.0.0.11 только дергается DoOnSubmit() с последующим:
Mozilla->Tools->Web Development->JavaScript Console
Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost/AnyTest/test/others/TestAutoPostBack/TestAutoPostBackI.aspx :: DoOnSubmit :: line 18" data: no]

Mozilla FireFox->Tools->Error Console
Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost/AnyTest/test/others/TestAutoPostBack/TestAutoPostBackI.aspx :: DoOnSubmit :: line 18" data: no]

В DoOnSubmit() typeof(OrgSubmit)="function" (BTW, осел дает object)
Попробовал посредством Mozilla -> Tools -> Web Development -> JavaScript Debugger посмотреть, но он че-то так подозрительно трейсит - скачет как угорелый практически по всем statement'ам... Да и не нашел я в переменных OrgSubmit... В опчем - как можно сие растолкать под мозилкой?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35085870
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
function CaptureSubmit()
{
	var Ctrl;

	if(Ctrl=document.forms["TestAutoPostBackIForm"])
	{
		OrgSubmit=Ctrl.submit;
		Ctrl.submit=DoOnSubmit;
	}
}

надо
function CaptureSubmit() {
var Ctrl;
if (Ctrl == document.forms["TestAutoPostBackIForm"]) {
OrgSubmit = Ctrl.submit;
Ctrl.submit = DoOnSubmit;
}
}

(условие все-таки)
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35085901
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck
if (Ctrl == document.forms["TestAutoPostBackIForm"])
....
(условие все-таки)

читайте буквари и не позорьтесь... Флеймить - сюда
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086208
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общая идея такая, что submit() - некий метод, который вызывает сабмит формы программным пуием и не обязательно может быть переопределен. Поэтому используем событие onsubmit. Если возвращает true - submit срабатывает иначе - нет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
	<head>
		<script type="text/javascript">
<!--
var
	OrgSubmit;
	
function DoOnSubmit()
{
	alert("DoOnSubmit()");
	alert("typeof(OrgSubmit)=\""+typeof(OrgSubmit)+"\"");
	return true;
}

function CaptureSubmit()
{
	var
		Ctrl;
		
	if(Ctrl=document.forms["TestAutoPostBackIForm"])
	{
		OrgSubmit=Ctrl.submit;
		Ctrl.onsubmit=DoOnSubmit;
	}
	alert("onload")
}
// -->
		</script>
	</head>
	<body onload="CaptureSubmit()">

<form name=TestAutoPostBackIForm>
<input type=submit value=bb >
</form>
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086210
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется, onsubmit сраббатывает тлько при интерактивном нажатии кнопки.
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086234
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacy
Разумеется, onsubmit сраббатывает тлько при интерактивном нажатии кнопки

Вооот!!! Выставился на свою голову в нескольких форумах и везде одно и то же: вызов Form.submit() не возбуждает
onsubmit . Грубо говоря - представьте себе, что форма тупо submit'иться из некой функции
Код: plaintext
1.
2.
3.
4.
function X()
{
	document.forms["SmthForm"].submit()
}
по таймеру. И все onsubmit'ы - мимо кассы...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086269
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дрозофила
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086308
Ghirik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может зациклить с сервером? Форма ушла - сервер плюнул в браузер....
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086344
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Грубо говоря - представьте себе, что форма тупо submit'иться из некой функции

Ну тогда методом Колумба
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
	<head>
		<script type="text/javascript">
<!--

function mambit(){
	this.onsubmit();
	this.submit();
}	

function DoOnSubmit()
{
	alert("DoOnSubmit()");
	alert("typeof(OrgSubmit)=\""+typeof(OrgSubmit)+"\"");
	return true;
}

function CaptureSubmit()
{
	var
		Ctrl;
		
	if(Ctrl=document.forms["TestAutoPostBackIForm"])
	{
		Ctrl.onsubmit=DoOnSubmit;
		Ctrl.mambit=mambit;
	}
	alert("onload")
}
// -->
		</script>
	</head>
	<body onload="CaptureSubmit()">

<form name=TestAutoPostBackIForm>
<input type=submit value=bb >
<input type=button value=cc onclick="this.form.mambit()">

</form>
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086368
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёлки-палки, действительно - онсубмит не ловится. Первый раз своими глазами увидел. До сих пор не верю - может какой секрет есть?
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086430
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
IDVsbruck
if (Ctrl == document.forms["TestAutoPostBackIForm"])
....
(условие все-таки)

читайте буквари и не позорьтесь... Флеймить - сюда
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4сам штоле почтал бы.

ваще, товарищи, вы меня извините, но самое тупое решение меньше в пять раз
чем вы тут пишете и мерятесь длиной органов. я просто в явоскрипте вобще
не понимаю и написал так как мог:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<html>
<head>
<title>Test Capture Submit</title>
<script type="text/javascript">
function OnLoad() {
	var myForm = document.getElementById('SmthForm');
	myForm.oldsubmit = myForm.submit;
	myForm.submit = function() {
		this.onsubmit();
		this.oldsubmit();
	};
}
</script>
</head>
<body onload="OnLoad()">
	<form id="SmthForm" method="post" onsubmit="alert('xxx')">
		<input type="text" name="as" />
		<input type="button" value="Button" onclick="this.form.submit()" />
	</form>
</body>
</html>

щас объясню чо и как. ставим фокус в инпут[текст] и нажмаем на клавиатуре
кнопку ентер. происходит обыкновенный сабмит формы. натуральный. экологически
чистый. супо! все работает.

а теперь нажмаем кнопку. ой! тоже работаит! штож такое?

PS красиво раскрашенный это пример кода можно посмотреть
в разделе форума " все для настоящего web-программиста "
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086431
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghirik
А может зациклить с сервером? Форма ушла - сервер плюнул в браузер....

Ноги проблемы растут отсюда Как раз нуна прибить возможность повторного submit'а... Если бы сервер успевал все быстро отработать - такие прыжки с переподвыпеодвертом над гибралтаром не понадобились бы...
apapacy
тогда методом Колумба

Чет ниасилил силу Вашей мЫсли :( В чем прЫкол-то?
ShSerge
действительно - онсубмит не ловится...может какой секрет есть?

А чего он должен ловиться? В начале идет onsubmit, а затем submit(). Но, если прямо вызвать submit(), то onsubmit - мимо кассы...
JavaScript.The Definitive Guide. David Flanagan
Методы
Форма наследует методы от HTMLElement и определяет следующие методы:
....
submit()
Передает данные из формы.
....

Обработчик событий
Форма наследует обработчики событий от HTMLElement и определяет следующие методы:
....
onsubmit
Вызывается непосредственно перед передачей данных формы.
....

Далее курим события и обрабоку событий
JavaScript.The Definitive Guide. David Flanagan
....для метода onsubmit объекта Form или метода onclick объекта Submit: вызов метода запускает функцию-обработчик события, но не приводит к передаче данных формы. (Чтобы на самом деле передать данные формы, мы вызываем метод submit() объекта Form.)

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086433
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agrasoffPS красиво раскрашенный это пример кода можно посмотреть
в разделе форума " все для настоящего web-программиста "
забыл сказать. проверил ещо это на 4 браузерах токашто: ie 7, ff 2, opera 9.5, safari 3.

везде работает одинаково. наверно чисто случайно.
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086434
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftДалее курим события и обрабоку событий
вот от тово что ты куришь - будет рак

Код: plaintext
 Veo moto  - поруске это значит - не надо переименовывать мои темы
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086445
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остался только один вопрос: почему
Код: plaintext
1.
2.
3.
OrgSubmit=Ctrl.submit;
....
OrgSubmit();
падает?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086448
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я - точно заглючил. Вообще-то я никогда и не обрабатывал онсубмит. Обычно, данные проверяю на онклик кнопочки (простой, типа буттон), а если она лежит на форме - ещё и ретурн фальсе, чтоб форма не отсубмитилась (в ИЕ - не субмитится, в других браузерах - сплошь и рядом). Потом уже форм.субмит(). Вся хреновость заключается в том, что другим советовал. Спасибо, Ex_Soft.
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086453
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Чет ниасилил силу Вашей мЫсли :( В чем прЫкол-то?


Да какая уж сила мысли. Элементарщина. Прикол в том что в Вашей целевой функции вы "цепляете" не submit(), а некий произвольный метод, например mambit(), который вызывает последовательно onsubmit() и submit().

Переопределять submit() - я бы все же не рекомендовал. Т.к. submit() - это не JavaScript функция, а native. Это означает, что теоретически не все модели браузера будут позволять корректно переопределять этоу функцию.
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086455
акуз_варвар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agrasoff Ex_SoftДалее курим события и обрабоку событий
вот от тово что ты куришь - будет рак

Код: plaintext
 Veo moto  - поруске это значит - не надо переименовывать мои темы

да тут походу не то курят...
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086469
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacyЭто означает, что теоретически не все модели браузера будут позволять корректно переопределять этоу функцию.удевительно.
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086479
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agrasoff
удевительно.

Угу... Особенно когда по отдельности
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function a()
{
	alert("a()");
}

function b()
{
	alert("b()");
}

function Test()
{
	var
		tmp;

	tmp=a;
	tmp();
	tmp=b;
	tmp();
}
....
function OnLoad()
{
	var
		Ctrl;

	if(Ctrl=document.getElementById("SmthForm"))
	{
		Ctrl.submit=Test;
	}
}
работает
А если в купе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var
	OrgSubmit;

function MySubmit()
{
	alert(typeof(OrgSubmit));
	OrgSubmit();
}

function OnLoad()
{
	var
		Ctrl;

	if(Ctrl=document.getElementById("SmthForm"))
	{
		OrgSubmit=Ctrl.submit;
		Ctrl.submit=MySubmit;
	}
}
нЭт
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086483
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function a()
{
	alert("a()");
}

function b()
{
	alert("b()");
}

function Test()
{
	var
		tmp;

	tmp=a;
	tmp();
	tmp=b;
	tmp();
}
есть такое слово - kiss. keep it simple, stupid. поруске - буть проще, человек.
я привел в этом топике очень мощный вариант решения. работает во всех браузерах,
которые сейчас использует человек больше всево. досведания. спасибо завне
мание.
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35086499
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agrasoff
буть проще

/me думает: к чему бы это?
Вариант решения меня, действительно, удовлетворил, но Вы так и не ответили на мой вопрос . Или это не Ваше решение?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35088562
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все срослось - мозилке нужен был caller
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function MySubmit()
{
    alert("MySubmit()");
}

function OnLoad()
{
    var
       Ctrl;

    if(Ctrl=document.getElementById("SmthForm"))
    {
       Ctrl.OrgSubmit=Ctrl.submit;
       Ctrl.submit=function(){MySubmit();this.OrgSubmit()};
    }
}
||
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var
    OrgSubmit;

function MySubmit()
{
    alert(typeof(OrgSubmit));
    OrgSubmit.call(document.getElementById('SmthForm'));
}

function OnLoad()
{
    var
       Ctrl;

    if(Ctrl=document.getElementById("SmthForm"))
    {
       OrgSubmit=Ctrl.submit;
       Ctrl.submit=MySubmit;
    }
}
Правда вот это уже M$ IE ниасилил... Но это уже не суть важно...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Правильно внедриться/перехватить
    #35088647
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
function MySubmit()
{
     alert(typeof(OrgSubmit));
     if(OrgSubmit.call)
       OrgSubmit.call(document.getElementById('SmthForm'));
     else
       OrgSubmit();
}
окончательный вариант
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Правильно внедриться/перехватить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]