2015-12-19 3 views
-1

Итак, у меня есть эта проблема, все они дают один и тот же код, но он никогда не работает. Я хочу иметь возможность только один раз щелкнуть по кнопке, чтобы вы не могли спамить, нажав кнопку, отправляющую ее более одного раза.Остановить несколько отправлений для html от

Здесь мой HTML.

<form id="sign" name="sign" method="post"> 
    <input type="text" name="username" placeholder="Username"><br> 
    <input type="text" name="email" placeholder="Email"><br> 
    <input type="password" name="password" placeholder="Password"><br> 
    <input type="submit" name="submit" value="Signup"> 

</form> 

Теперь люди, которые исправляют в Google, должны добавить этот код в тип ввода отправки.

onclick="this.value='Submitting ..'; this.disabled=true; this.form.submit();" 

или

onclick="this.value='Submitting ..'; this.disabled=true;" 

Теперь это отключает кнопку отправки после того как она была нажата, как я хочу, но он останавливает формы их представления, которые дефекты смысла делать это в первую очередь.

Наконец код, который не работает

<form id="sign" name="sign" method="post"> 
    <input type="text" name="username" placeholder="Username"><br> 
    <input type="text" name="email" placeholder="Email"><br> 
    <input type="password" name="password" placeholder="Password"><br> 
    <input type="submit" name="submit" value="Signup" onclick="this.value='Submitting ..'; this.disabled=true;"> 

</form> 
+0

Элемент 'this.form.submit()' - это то, что должно быть представлено в форме, попробуйте заменить его на 'document.getElementById ('sign'). Submit();' – 2pha

+0

Ваш код отлично работает для меня (Firefox 40). Испытайте во всех браузерах и сообщите нам, для каких из них он работает, а какие нет. Я до сих пор опускаю ваш вопрос. –

+0

Это не работает для меня '' –

ответ

0

Если я вас правильно понял, вы должны попробовать следующее:

Вместо того, чтобы использовать встроенный JavaScript, я дал представить вводе информации идентификатор и использовать Javascript код:

var form = document.getElementById('sign'), 
    submit = document.getElementById('submit'); 

submit.onclick = function() { 
    submit.value='Submitting ..'; 
    form.submit(); 
}; 

https://jsfiddle.net/5kn2L7m9/3/

Я также удалил .disabled = true, потому что я думаю, поэтому форма вообще не отправлялась. Возможно, вы должны сделать это, добавив класс и удалив прослушиватель событий onclick или проверьте javascript, если форма уже отправлена.

+0

Ваше понимание моей точки зрения, но это все еще не работает для меня? Пробовал это на firefox и chrome. Вы пытались получить данные из данных? –

+0

Я до сих пор не знаю, могли ли я и другие, кто прокомментировал здесь, получить то, что вы хотите достичь. –

+0

Я попробовал ваш новый код, но теперь вы можете просто спамить кнопку. Его либо пользователь может спам нажать кнопку отправки форм или отключить кнопку после нажатия на нее, которая останавливает. Это действительно раздражает. –

0

Вам нужно будет сделать один из ваших необходимых входных сигналов, чтобы включить кнопку отправки - она ​​отключена - установлена ​​функцией init(). Я сделал это для текстового поля для иллюстрации.

Вам нужно будет установить значение в вашем JavaScript для $hidden_input при вводе текстового поля - оно должно быть 0, когда страница загружается, но будет установлена ​​в 1, когда она будет готова к отправке. Вы можете настроить его по-разному, указав значение, заданное в PHP. Это зависит от того, как вы хотите, чтобы он выполнялся.

Вы также должны установить действие формы на <?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>.

<?php 
if (isset($_POST['hidden_input'])) $hidden_input = intval($_POST['hidden_input']); 

$submit_count_input = intval($_POST['submit_count_input']); 

if ($hidden_input == 1){ 
// do your processing here 
$hidden_input = 2; 
echo "Thank you. Form processed"; 
}else{ 
$hidden_input = 1; 
echo "Form not processed."; 
}  
// remove this section - just for testing 
echo " Control Token: " . $hidden_input . " "; 
echo " Submit Count: " . $submit_count_input; // to show it submits but does not process form 
$submit_count_input++; 
?> 
<!DOCTYPE html> 
    <html> 
    <head> 
    <script language="javascript"> 
    function init(){ 
    if (document.getElementById('hidden_input').value == 2){ 
    document.getElementById('sbutton').value = " Submitted "; 
    }else{ 
    document.getElementById('sbutton').value = " Submit "; 
    } 
    document.getElementById('sbutton').disabled = true; 
    } 
    function enable_it(){ 
    // could reset it here but you will be able to submit again 
    //document.getElementById('hidden_input').value = 1; 
    document.getElementById('sbutton').disabled = false; 
    document.getElementById('sbutton').value = " Submit "; 
    } 
    function submit_this(){ 
    document.form.submit(); 
    } 
    </script> 
    </head> 
    <body onload="init()"> 

     <form name="form" id="form" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>" method="post"> 
     <input type="text" name="text_box" onKeyPress="enable_it();" required /> 

     <input type="hidden" name="hidden_input" id="hidden_input" value="<?php echo $hidden_input ?>" /> 
     <input type="hidden" name="submit_count_input" id="submit_count_input" value="<?php echo $submit_count_input ?>" /> 

     <input type="button" name="sbutton" id="sbutton" value="" onclick="submit_this();" /> 
     </form> 
     <a href="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>">Click to start a new submission</a> 

    </body> 
    </html> 

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

if (intval($_POST['hidden_input']) == 1){ 
    // skip your signup code 
} 

Имейте в виду, что эта страница в основном зависит от JavaScript - только в том случае, может быть проблемой для тех, которые не любят зависимость от JavaScript.