Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Java Script - особен случай на Submit

Featured Replies

Ще си позволя да ви занимая със следния случай: Представете си че имаме таблица от 10 реда, като всеки ред е една отделна форма. Във всяка форма имаме няколко текстови полета, в които нанасяме промени. Задачата е да се събмитне съответната форма щом курсора (не поинтера на мишката, а текстовия) я напусне, т.е. мине в съседна форма по-горе или по-долу. Ако случайно има решение на този проблем чрез JavaScript ще е най-добре. Благодаря предварително на всички които ще се отзоват на това мое запитване.

Редактирано от xentia (преглед на промените)

Ще си позволя да ви занимая със следния случай: Представете си че имаме таблица от 10 реда, като всеки ред е една отделна форма. Във всяка форма имаме няколко текстови полета, в които нанасяме промени. Задачата е да се събмитне съответната форма щом курсора (не поинтера на мишката, а текстовия) я напусне, т.е. мине в съседна форма по-горе или по-долу. Ако случайно има решение на този проблем чрез JavaScript ще е най-добре. Благодаря предварително на всички които ще се отзоват на това мое запитване.

В javascript & html има следния event, който върши работата при махане на курсора от съответно текстово поле, елемент и там каквото се сетиш, а именно: onBlur, демек: <input type="text" name="textfield1" size="30" onBlur="someFunctionToProcessTheAction(this)"> cool.gif

Значи в onBlur евента си викаш функцията, която ти обработва действието, което искаш да се случи след премахване на курсора от съответния елемент на формата, успех ;)

  • Автор
В javascript & html има следния event, който върши работата при махане на курсора от съответно текстово поле, елемент и там каквото се сетиш, а именно: onBlur, демек: <input type="text" name="textfield1" size="30" onBlur="someFunctionToProcessTheAction(this)"> cool.gif

Значи в onBlur евента си викаш функцията, която ти обработва действието, което искаш да се случи след премахване на курсора от съответния елемент на формата, успех ;)

Има такова събитие, обаче не и при формите. Има за елементи които се съдържат вътре във формите, но това не ми върши работа. Иначе пробвах за всеки случай, но поставянето на дефиниция onBlur="..." във form таг-а не даде никакъв резултат. Значи да поясня, че аз се нуждая от изпълнение на хандлера когато курсорът напусне формата, без значение от кой елемент в тази форма се намира в момента на напускането

Редактирано от xentia (преглед на промените)

Мисля, че може да стане ако на всеки INPUT елемент от формите при събитие ONBLUR (излизане от фокуса) се извиква JavaScript, който прави необходимите проверки и изпълнява SUBMIT на формата която го е извикала.

  • Автор
Мисля, че може да стане ако на всеки INPUT елемент от формите при събитие ONBLUR (излизане от фокуса) се извиква JavaScript, който прави необходимите проверки и изпълнява SUBMIT на формата която го е извикала.

Аз в момента съм го направил така. Проблемът е че Submit извиква една сървърна страница която трябва да ъпдейтне стойностите от полетата в текущата форма в една база. Случва се така че когато потребителят прави преход от поле към поле в една и съща форма непрекъснато се извиква събмит хандлера и това товари страшно много сървъра. Идеята е след като приключи с едитването по текущата форма и кликне в следващата да се изпълни тази процедура.

Тогава най-добре е да се изпозлва ONCHANGE събитието и данните ще се събмитват само ако има промяна в поле.

  • Автор
Тогава най-добре е да се изпозлва ONCHANGE събитието и данните ще се събмитват само ако има промяна в поле.

Да, обаче onChange също е свързано към елемент от формата, а не към самата форма. Пак се получава така че при промяна на поле, когато потребителят не е напуснал формата ще се извиква тази сървърна процедура. Вече започнах да се отчайвам. Май ще трябва да си сменя подхода към ситуацията. Във описанието на HTML стандарта, към форма има дефинирани събития, които просто не ми вършат работа. Мислю си за варианти, при които да следя с отделен скрипт дали потребителя преминава от една към друга форма, ама това си е хамалогия просто. Би трябвало да има по-елегантен начин за решение на този проблем.

Какво налага да се извършва SUBMIT само при промяна на формата ?

Хрумна ми, че може да използваш някаква променлива, в която да пазиш условен номер на формата, която в момента има фокуса. При промяна първо да се събмитне формата със съответния номер и да се запише номера на новата фокусирана форма.

  • Автор
Какво налага да се извършва SUBMIT само при промяна на формата ?

Хрумна ми, че може да използваш някаква променлива, в която да пазиш условен номер на формата, която в момента има фокуса. При промяна първо да се събмитне формата със съответния номер и да се запише номера на новата фокусирана форма.

Таблицата която съм описал за пример на всеки ред описва различни цени за отделен артикул. Потребителят който редактира тези цени първоначално трябва да редактира 10 различни цени за него, събрани във форма. В момента в който реши че е приключил той кликва на следващият ред, т.е. преминава на следващият артикул и това е момента в който промените които той е направил трябва да се предадат към сървъра.

Иначе и на мен ми хрумна тази идея да следя с отделни Blur събития всички полета от формата и да следя кога ще се смени ID-то на същата. Когато това стане, да се изпълни събмит. Варианта обаче е предразположен към лесно допускане на грешки при скриптирането, а и все си мислех че трябва да има по-лесен начин, но явно няма и вече съм почти на 1/3 от решението което ти предлагаш. Лошото е че трябва да се организира процедура която постоянно да следи коя е активната форма. Т.е. това не е лошо, но просто се усложнява обработката, но като няма как...

Благодаря все пак :angry:

Мисля, че можеш лесно да следиш формите като на всяка текстова кутия сложиш onfocus и имаш глобална променлива за текущата форма. Проверяваш дали формата е различна от текущата и не е null и ако да тогава субмитваш тази форма. Ако не е сетваш формата на кутията.

  • 3 седмици по-късно...

Нещо такова ще е, може кода ми да се подобри още и ако някой има желание нека опита да го подобри че лично на мен много много не ми допада но все пак е точно това което иска човека.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>target example</title>

<style type="text/css">

	.form_container {

		width: 300px;

		height: 100px;

		border: 1px solid black;

		margin-bottom: 5px;

	}

</style>

<script type="text/javascript">

	var names=new Array();

	var obj;

function CatchObj() {

		obj=document.forms;

			for (i=0;i<obj.length;i++) {

				obj[i].onclick=function () {

					names.push(this.name);

				}

			}

	}

function CatchEvent(evt) {

		var l=names.length;

		var clicked=(typeof evt.target=='undefined' ? window.event.srcElement: evt.target);

			if (clicked.tagName!='FORM' && clicked.tagName!='INPUT' && l>0) {

				alert(names[l-1]);

				names.splice(0,l);

			}

			else if (names[l-1]!=names[l-2] && l>1) {

				alert(names[l-2]);

			}

	}

</script>

</head>


<body onload="CatchObj()" onclick="CatchEvent(event)">

<div class="form_container">

	<form id="as" name="first" action="">

		<input type="text"><br>

		<input type="text">

	</form>

</div>

<div class="form_container">

	<form name="second" action="">

		<input type="text"><br>

		<input type="text">

	</form>

</div>

<div class="form_container">

	<form name="three" action="">

		<input type="text"><br>

		<input type="text">

	</form>

</div>

</body>

</html>

Хайде да направим нещата по простия начин :

<html>

<head>

<title> New Document </title>

</head>

<script type="text/javascript">

<!--

var currentForm = null;


function widgetFocus(sender)

{

	if (currentForm == null)

	{

		currentForm = sender.form;

	}

	else if (sender.form != currentForm)

	{

		sender.form.submit();

	}

}

//-->

</script>

<body>

Form 1

<form method="post">

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

</form>

<hr />

Form 2

<form method="post">

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

</form>

<hr />

Form 3

<form method="post">

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

</form>

<hr />

Form 4

<form method="post">

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

	<input type="text" onfocus="widgetFocus(this);" />

</form>

</body>

</html>

Чисто и просто!

  • Автор

10x darkterminal,

Точно този метод използвах. Проектът вече е в тестов период от 2 седмици и скоро ще тръгне в реални работни условия. Ако някой иска да види решението на този проблем в такава работна система, нека да ми се обади, ще му дам линк. Голяма БЛАГОДАРЯ на всички които се отзоваха със съвети и решения на моя проблем

:baby:

Както виждам, darkterminal, направил си скрипт точно по мойте инструкции.

С риск да те обидя, но скрипта е направен изцяло по желанието на xentia, без да спазвам ничии други инструкции :help:

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.