0

このフォーラムと Web の両方で回答を探してみましたが、回答がある場合は、既に試したことを実行するように言われます。

したがって、私の問題は次のとおりです。クライアント側のjqueryとサーバー側のphp(重力フォーム)の2つのバリデーターを実行するフォームがあります。これはしばらくの間うまく機能しています。ただし、送信の重複が多いことに気付いたので、フォームがクライアント側で検証されたら、送信ボタンを無効にしたいと考えています。フォームに入力して送信すると、フィールドが有効な場合はクライアント側の検証スクリプトが実行されます - 送信ボタンを無効にして (二重送信を防ぐため)、スクリプトを 2 番目の検証に送信します。いずれかのフィールドが無効な場合、検証はエラー メッセージを返し、送信ボタンを無効にしないでください。

私は周りを見回して、最終的にこれを追加しました:

submitHandler: function(form) {
$(form).find(":submit").attr("disabled", true).attr("value",
"Submitting...");
form.submit();
}

私の検証スクリプトの最後まで。

しかし、これは私が望んでいたようにはなりませんでした。上記のあらゆる種類のさまざまなバリアントを試しましたが、追加すると、スクリプトがまったく実行されないか、送信ボタンが無効になるだけで (すべてのフォーム フィールドが無効であっても)、実行できなくなります。修正して再送信するには、ページをリロードして送信ボタンを再度有効にする必要があります。

私は何を間違っていますか?検証スクリプト全体は次のようになります。

jQuery(function() {


var $ = jQuery;
$(document).ready(function() {

$('#gform_6').validate( {     
rules       : {
input_6      : { required: true, personnummer: true },          // Personnummer
input_30     : { required: true, personnummer: true },          // Personnummer
input_10     : { required: true, minlength: 6 },                 // telenr
"input_21.1" : { required: true },                               // villkor
"input_3.3"  : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); } },  // 
"input_3.6"  : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); } },  // efternamn
input_7      : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); }, email: true },  // e-post 1
input_31     : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); }, email: true, equalTo: "#input_6_7" }, // e-post 2 //adress       : { required: true },  // adress
input_14     : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); } },   // lön
input_15     : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); }, number: true, minlength: 4, maxlength: 5 }, // clearingnr
input_16     : { required: function(element) { return (jQuery(element).parent().is(":hidden") == false); }, number: true, minlength: 7 }    // kontonr
      },

messages    : {
//pnummer      : "Födelsedatum ogiltigt, ska ha formatet 19770131-1234",
input_6      : "",
input_30     : "Födelsedatum ogiltigt, ska ha formatet 19770131-1234",
"input_3.3"  : "Du måste fylla i ditt förnamn",
"input_3.6"  : "Du måste fylla i ditt efternamn",
input_7      : "Ej giltig e-postadress",
input_31     : "Dina mail-adresser stämmer ej överens",
//adress       : "Fyll i din adress",
input_14     : "Fyll i din lön",
input_10     : "Fyll i ditt telefonnummer",
input_15     : "Clearingnummer måste vara 4 eller 5 siffror",
input_16     : "Kontonummer måste vara minst 7 siffror",
"input_21.1" : "Du måste acceptera villkoren"
},


//debug        : true,

errorClass   : "form-error",
errorElement : "span"
//validClass   : "valid",
submitHandler: function(form) {
$(form).find(":submit").attr("disabled", true).attr("value",
"Submitting...");
form.submit();
}


}
);

お願いします

4

1 に答える 1

0

検証コードに何か問題があるとは思いません。問題は、フォームの送信にあります。フォームを効果的に送信する前に、それを検証してみませんか? このような:

submitHandler: function(form) {
//Validates your form
$(form).validate();
//Checks if the form rules are all valid
if($(form).valid()){
$(form).find(":submit").attr("disabled", true).attr("value",
"Submitting...");
form.submit();
}
}

または、var を追加して、フォームに送信があったかどうかを確認することもできます。

<script type="text/javascript">
var isSubmit = false;

$(form).submit(function(){
//Checks if the form has already been submitted
if(isSubmit === false){
isSubmit = true;
//Do your form submission logic here
}
//Just in case you don't want it to conclude
return false;
});

</script>
于 2013-04-17T20:17:39.403 に答える