[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: одиночное нажатие кнопки сабмит
VoLk88
Столкнулся с проблемой. Пользователи нажимают несколько раз на сабмит и на сервер несколько раз улетает содержимое формы. Притяного мало. Не хочу ограничивать сильно пользователей и делать дилеи между отправками. Пробовал онклик="зис.дисаблед=1", но кнопка блокируется до того, как содержимое формы улетит.
Может есть какой-нибудь простой и интересный способ?
Спасибо.



Спустя 5 минут, 54 секунды (3.02.2010 - 16:07) sergeiss написал(а):
Вообще, странные какие-то пользователи... smile.gif

Попробуй так сделать:
- в onsubmit вызываешь функцию
- в этой функции проверяешь некую переменную, которая при первом вызове функции равна true, а потом заменяется на false
- эта функция возвращает значение этой переменной

Тогда при первом нажатии кнопки submit будет выполнен, а затем браузер может тормозить сколько угодно, и юзер может кнопать сколько угодно - больше не будет ни одного (лишнего) сабмита.

PS. Тему переместил в JavaScript.

Спустя 14 минут, 30 секунд (3.02.2010 - 16:22) VoLk88 написал(а):
sergeiss
Пробовал, но не понимаю. Может потому что сегодня экзамен сдавал)
Мы вызываем функцию. При каждом вызове функции, будут декларироваться переменные.

Спустя 1 минута, 59 секунд (3.02.2010 - 16:24) sergeiss написал(а):
Нет, переменная должна быть объявлена вне функции, до неё!!! А в функции мы ее просто проверяем (сначала), и изменяем (если нужно).

var first_time=true;

function if_submit()
{
if( first_time )
{
first_time=false;
return true;
}
return false;
}

Спустя 6 минут, 7 секунд (3.02.2010 - 16:30) VoLk88 написал(а):
int n=0;
function subForm()
{
//subnow = true;
if(n == 0)
{
return false;
}
else
{
return true;
}
n=n+1;
}


<input type=submit name=submit value="Добавить" onSubmit="this.disabled=subForm()">


так? не работает(

Спустя 2 минуты, 45 секунд (3.02.2010 - 16:33) sergeiss написал(а):
Ёпрст... Во-первых, в твоей функции до n=n+1; дело никогда не дойдет smile.gif

Во-вторых - зачем disabled???

onsubmit="return subForm()"


И начинку функции сделай, как я написал.

Спустя 7 минут, 5 секунд (3.02.2010 - 16:40) VoLk88 написал(а):
пробовал вашим скриптом, писал onSubmit="return if_submit()", результат такой же, проскакивает сразу несколько

Спустя 3 минуты, 1 секунда (3.02.2010 - 16:43) DedMorozzz написал(а):
покажи код ф-ии Иф_сабмит

Спустя 4 минуты, 33 секунды (3.02.2010 - 16:47) VoLk88 написал(а):
DedMorozzz
var first_time=true;

function if_submit()
{
if( first_time )
{
first_time=false;
return true;
}
return false;
}

вот, как мне sergeiss дал, я ничего не менял

Спустя 8 минут, 3 секунды (3.02.2010 - 16:55) DedMorozzz написал(а):
скорее всего ты не сравниваешь значение ф-и, а проверяешь тру иль фолс переменной "фёст тайм". её тогда и возвращай. Покажи как используешь ответ.

Спустя 4 минуты, 59 секунд (3.02.2010 - 17:00) VoLk88 написал(а):
<input type=submit name=submit value='Добавить' onSubmit=\"return if_submit()\">
я правда этого не понимаю, думаю что правильно было делать:
<input type=submit name=submit value='Добавить' onClick=\"this.disabled=if_submit()\">
но при таком раскале вообще ничего не отправляется

Спустя 3 минуты, 32 секунды (3.02.2010 - 17:04) sergeiss написал(а):
Цитата (VoLk88 @ 3.02.2010 - 18:00)
<input type=submit name=submit value='Добавить' onSubmit=\"return if_submit()\">

А чего тут за каша такая??? Часть в апострофах, часть в кавычках, часть без этого всего, "голышом"... И слэши тут для чего? Эта строка выводится через echo? Или у тебя прямо в браузер такая строка передается, со слэшами?

Мне так кажется, что ты просто "накосячил" с синтаксисом smile.gif

Попробуй в первой строке функции написать alert( 'In function' ); и посмотри, выйдет ли эта строка.

Спустя 1 минута, 51 секунда (3.02.2010 - 17:06) VoLk88 написал(а):
через эхо, поэтому и экранировал

Спустя 1 минута, 29 секунд (3.02.2010 - 17:07) sergeiss написал(а):
Цитата (VoLk88 @ 3.02.2010 - 18:06)
через эхо, поэтому и экранировал

Сделай всё однотипно. Лучше - в кавычках.

Спустя 13 секунд (3.02.2010 - 17:07) DedMorozzz написал(а):
onSubmit=\"if_submit()\" без ретёрн

Спустя 5 минут, 55 секунд (3.02.2010 - 17:13) VoLk88 написал(а):
пробовал без ретёрн, тоже самое.

кстати, алерт не срабатывает.
сейчас буду разбираться.

Спустя 1 минута, 42 секунды (3.02.2010 - 17:15) Lenarfate написал(а):
можешь попробывать сделать так, чтобы при нажатие сабмита запускался js типа
document.location.href="index.php"


например smile.gif

Спустя 1 минута, 51 секунда (3.02.2010 - 17:17) DedMorozzz написал(а):
кстати, сергейсс, а тут разве не так:

function if_submit()
{
if( first_time==true)
{
first_time=false;
return true;
}
else
{
return false;
}
}

Спустя 4 минуты, 10 секунд (3.02.2010 - 17:21) sergeiss написал(а):
Цитата (DedMorozzz @ 3.02.2010 - 18:17)
кстати, сергейсс, а тут разве не так:

А зачем, если это и так логическая величина? Которая изначально объявлена как true, и потом заменяется на false. И else не нужен!!! Потому что, если условие верно, то изнутри ифа выйдешь из функции.

Цитата (VoLk88 @ 3.02.2010 - 18:13)
сейчас буду разбираться.

Сделай всё однотипно!!!

echo '<input type="submit" name="submit" value="Добавить" onSubmit="return if_submit()" />

Спустя 1 минута, 6 секунд (3.02.2010 - 17:22) DedMorozzz написал(а):
ах да. булеан...торможу mad.gif

Спустя 4 минуты (3.02.2010 - 17:26) sergeiss написал(а):
Цитата (DedMorozzz @ 3.02.2010 - 18:22)
торможу

И еще раз повторю - else (как ты написал) не нужен! smile.gif

Спустя 2 минуты, 3 секунды (3.02.2010 - 17:28) DedMorozzz написал(а):
да понял уже smile.gif я ж написал
Цитата
Цитата (DedMorozzz @ 3.02.2010 - 18:22)
торможу
smile.gif)

Спустя 14 минут, 21 секунда (3.02.2010 - 17:42) VoLk88 написал(а):
не выходит всё равно. ладно. буду гуглить дальше и разбираться)
спасибо)

Спустя 49 минут, 36 секунд (3.02.2010 - 18:32) Winston написал(а):
Цитата (VoLk88 @ 3.02.2010 - 16:01)
Столкнулся с проблемой. Пользователи нажимают несколько раз на сабмит и на сервер несколько раз улетает содержимое формы. Притяного мало. Не хочу ограничивать сильно пользователей и делать дилеи между отправками. Пробовал онклик="зис.дисаблед=1", но кнопка блокируется до того, как содержимое формы улетит.
Может есть какой-нибудь простой и интересный способ?
Спасибо.


Для того чтобы такого не было, нужна защита от F5 (Refresh), тогда сколько не жми на submit, сколько не обновляйся, одна и та же инфа в базу больше не полезет, как например на этом форуме. Кстати мне самому, интересно как такую защиту реализовать, т. к. у самого те же проблемы. Может Эксперты в разделе для новичков, создадут тему Защита от F5 с пометкой ВАЖНО? чтобы раз и навсегда избавится от этих вопросов smile.gif

Спустя 47 минут, 44 секунды (3.02.2010 - 19:20) arlamar написал(а):
надо с ретёрном тока зачем он в input'е?!?!??!?

так надо:
<form onsubmit="return if_submit()">

Спустя 26 минут, 48 секунд (3.02.2010 - 19:47) ZSH написал(а):
onSubmit надо вешать на form а не input

Спустя 23 минуты, 26 секунд (3.02.2010 - 20:10) Lenarfate написал(а):
<input type="submit" name="ok">



$ok = isset($_POST['ok']) ? true : false;

if($ok)
{
//тут всякий код...
//...


header("location: ". $_SERVER['PHP_SELF']);
}


вот и все, и не надо гуглить

Спустя 2 часа, 30 минут, 44 секунды (3.02.2010 - 22:41) sergeiss написал(а):
Цитата (PHPprogramer @ 3.02.2010 - 19:32)
Может Эксперты в разделе для новичков, создадут тему Защита от F5 с пометкой ВАЖНО? чтобы раз и навсегда избавится от этих вопросов

Ты не поверишь, но эта тема уже многократно "обсасывалась" тут smile.gif Используем header( 'Location: ...' ); - и всё работает.

Вот только я так понял топик-стартера, что у него проблема не с Ф5, а с тем, что очень шустрые юзеры успевают многократно "жмякнуть" по кнопке сабмит до того, как форма уйдет на обработку.

Спустя 10 часов, 20 минут, 20 секунд (4.02.2010 - 09:01) Alex VoDevil написал(а):
Ну так может просто за грэйаутить сабмит то? Прописать кнопке id = "mySubmit" а потом при сабмите формы:
document.getElementById('mySubmit').disabled = true;
и всем счастье... нет?

Спустя 34 минуты, 1 секунда (4.02.2010 - 09:35) sergeiss написал(а):
Цитата (Alex VoDevil @ 4.02.2010 - 10:01)
Ну так может просто за грэйаутить сабмит то?

Секунд 30-40-50 пытался понять фразу... Еле дошло... А по-русски нельзя было сказать, чтоб понятнее?

Согласно правил форума основным языком является русский (п.2.4.а).

Спустя 1 час, 10 минут, 25 секунд (4.02.2010 - 10:46) Joker написал(а):
а так не проще

<form action="" method="post" onsubmit="return if_submit('submit')">
<input
type="submit" id="submit">
</form>




function if_submit(id)
{
document.getElementById(id).disabled='disabled';
return true;
}

Спустя 3 минуты, 30 секунд (4.02.2010 - 10:49) Joker написал(а):
Цитата (sergeiss @ 4.02.2010 - 11:35)
Секунд 30-40-50 пытался понять фразу... Еле дошло... А по-русски нельзя было сказать, чтоб понятнее?


+1 после того как пост создал только дошло)

Спустя 6 минут, 33 секунды (4.02.2010 - 10:56) Alex VoDevil написал(а):
виноват, исправлюсь wink.gif Просто у меня в последние дни основным языком является английский и в силу скудоумия моего порой кодировки путаются и рождаются вот такие перлы.

Спустя 9 минут, 4 секунды (4.02.2010 - 11:05) sergeiss написал(а):
Joker - ты не предотвращаешь многократное нажатие на кнопку smile.gif

А речь идет именно об этом!!!

Вот я сделал такую тестовую хрень... И у меня получалось несколько раз нажать на кнопку! smile.gif Один раз из нескольких десятков попыток, но получается.

<script language="javascript">
var
subm=0;

function test_submit()
{
if( subm >=2 ) alert( subm );

subm++;
document.getElementById( 'pressed' ).value=subm;
}

</script>

<form
action="" enctype="multipart/form-data" onsubmit="test_submit()" method="post">

<input
type="text" name="txt" id="txt" value="12345" />
<input
type="submit" name="s" id="s" value="press button" />
<input
type="hidden" name="pressed" id="pressed" />

</form>




if( !empty( $_POST['pressed'] ) )
echo 'Нажато '.$_POST['pressed'].' раз(а)';


Спустя 7 минут, 7 секунд (4.02.2010 - 11:12) Joker написал(а):
Цитата (sergeiss @ 4.02.2010 - 13:05)
Joker - ты не предотвращаешь многократное нажатие на кнопку

как это? при первом же нажатии кнопка заблокируеться и хоть затыкай на неё она уже не активна....
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.