To znowu ja. Tym razem, chyba ostatni raz w tym skrypcie. Chodzi mi o blokadę antyfloodową, mam już zrobione blokadę formularza po jego wysłaniu, chodzi teraz o czasowe usunięcie blokady. Próbowałem z funkcjami clearInterval i setInterval ale nie udawało się... Pomożecie? Blokada ma być na 1 minutę.
$(document).ready(function(){
$("#submit").click(function(){
var nameVal = $("#1C2bt").val();
var emailVal = $("#rgrS16").val();
var messageVal = $("#editor").val();
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var error = '';
var hasError = false;
if(nameVal == '') {
error = error + 'Wpisz swoje imię i nazwisko<br/>';
hasError = true;
}else if(nameVal == 'podaj swoje imię i nazwisko'){
error = error + 'Wpisz swoje imię i nazwisko<br/>';
hasError = true;
}
if(emailVal == '') {
error = error + 'Wpisz adres email<br/>';
hasError = true;
}else if(emailVal == 'podaj email odbiorcy'){
error = error + 'Wpisz adres email<br/>';
hasError = true;
} else if(!emailReg.test( emailVal )) { error = error + 'Wpisz poprawny adres email<br/>';
hasError = true;
}
if(messageVal == '') {
error = error + 'Wpisz swoją wiadomość<br/>';
hasError = true;
}else if(messageVal == 'Wpisz swoją wiadomość'){
error = error + 'Wpisz swoją wiadomość<br/>';
hasError = true;
}
if(!error == ''){
div = $('<div class="result">'+error+'</div>');
$("#body").after(div);
setTimeout(function() { $(div).remove() }, 5000);
}
if(hasError == false) {
$("#form").fadeTo("slow", 0.30, function() {
// dorzucamy kod z obrazkiem sygnalizującym procedowanie danych przez skrypt
// moment kulminacyjny naszej aplikacji w jQuery - przesyłamy dane do skryptu php
$.ajax({
type: "POST",
url: "sendmail.php",
data: { name: nameVal, email: emailVal, message: messageVal },
// msg zawiera wartość zwróconą przez skrypt php w przypadku poprawnego zakończenia działania
success: function(msg) {
// zapiszmy wynik działania skryptu na stronie html w div o id=”content”
block_form();
div = $('<div class="result">'+msg+'</div>');
$("#body").after(div);
setTimeout(function() { $(div).remove() }, 5000);
// schowajmy fomę
$("#form").fadeTo("slow", 1.0);
},
// wystąpiły błędy
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#info2").html('Przepraszamy, wiadomość nie mogła zostać wysłana.');
$("#form").fadeOut("slow");
}
});
});
}
return false;
});
});
function unlock_form() {
$("input[name='1C2bt#']").removeAttr("disabled");
$("input[name='rgrS16']").removeAttr("disabled");
$("input[name='gnro^496']").removeAttr("disabled");
$("textarea[name='pm^5']").removeAttr("disabled");
$("input[name='mrgfeo#$1']").removeAttr("disabled");
$("input[name='asd4sdf']").removeAttr("disabled");
}
function block_form(){
$("input[name='1C2bt#']").attr("disabled", "disabled");
$("input[name='rgrS16']").attr("disabled", "disabled");
$("input[name='gnro^496']").attr("disabled", "disabled");
$("textarea[name='pm^5']").attr("disabled", "disabled");
$("input[name='mrgfeo#$1']").attr("disabled", "disabled");
$("input[name='asd4sdf']").attr("disabled", "disabled");
}
EDIT: Już nie trzeba, wystarczyło za pomocą setTimeout(); wywołać funkcję unlock_form();. Dziwna rzecz, że jeśli zrobiłem setTimeout(unlock_form(),5000); to nie działało, a jeśli setTimeout(function() { $("input[name='1C2bt#']").removeAttr("disabled");
$("input[name='rgrS16']").removeAttr("disabled");
$("input[name='gnro^496']").removeAttr("disabled");
$("textarea[name='pm^5']").removeAttr("disabled");
$("input[name='mrgfeo#$1']").removeAttr("disabled");
$("input[name='asd4sdf']").removeAttr("disabled");}, 5000); to działa :D
Edytowane przez Xerxes dnia 30.03.2012 17:28:15
|