2016-04-11 23 views
2

harici işleyicisi ile teslim :jQuery doğrula eklentisi, formunu nasıl durduracağını ben jqueryvalidation formları doğrulamak için küresel bir senaryosu var

$("#myform").submit(function(){ 
    $("body").append("<p>other handler</p>"); 
    return false; 
    }); 

İkinci el işleyicisinin return false; neden formu göndermeyi engellemiyor? Ayrıca, preventDefault ve stopProparation ile çalıştım ama işe yaramıyor.

https://jsfiddle.net/brj7ttdn/5/

+0

senin jsfiddle bu durum göremiyorum, tüm formlar aracılığıyla döngü bir each() özelliği kullanmak ve ayrı ayrı eklenti bağlamak düzeltmek için? –

+0

Üzgünüm, kemanım yalnızca oturumum için güncellendi, şimdi bağlantıyı son sürüme güncelliyorum. – Tobia

+0

@Tobia, cevabın –

cevap

-1

düzgün aşağıda gibi) preventDefault (deneyebilir miyim:

$(function(){ 
    $("form").submit(function(event){ 
    $("body").append("<p>other handler</p>"); 
    event.preventDefault(); 
    }); 
}); 

Fiddle edin.

+0

İlk onaylama işleyicisini kaldırdığınız için keman işlersiniz. Benim durumumda 2 işleyicim var, birincisi (ana projenin genelini ve bunu değiştiremiyorum) ve özel olanı tek bir forma. – Tobia

+0

Üzgünüm, kemanım yalnızca oturumum için güncellendi, şimdi bağlantıyı son sürüme güncelledim ve şimdi durumumu anlayabileceğinizi düşünüyorum. – Tobia

-1

Düğme tıklama etkinliğinizi devre dışı bıraktığınızda, form gönderme işlemi de devre dışı bırakılacaktır. Değişim

$("#myform").submit(function(e){ 

$("button").click(function(e){ 

formunuz basın tarafından gönderirseniz

için, "ENTER" tuşa basma işlemi tetiklemek ve eylemi durdurmak gibi bir komut dosyası ile sunmalıdır: Teşekkür

$("input").on("keypress", function(e){ 
    var keypress; 
    if(window.event) { // IE      
     keypress= e.keyCode; 
    } else if(e.which){ // Netscape/Firefox/Opera     
     keypress= e.which; 
    } 
    if (keypress == 13) { 
     e.preventDefault(); 
    } 
}) 
+0

Ayrıca "ENTER" için bir metin girişi ve daha sonra basın formunu devre dışı bırakmak istiyorum ... Bu düğme sadece test amacı için var. – Tobia

+0

Formu javascript ile mi gönderiyorsunuz? Komut dosyanızı değiştirin. Değilse, formunuzu göndermek için bir düğmeyi tıklamanız gerekir. –

+0

@Tobia: doğrulama() eylemini kullanarak doğrulamanız için bir betiğin kullanılmasının bir yolu yoktur. Çağrılan submit() eyleminden önce bir olayı tetiklemeniz gerekir. Yani formu "ENTER" ile gönderdiğinizde/veya bir düğmeyi tıkladığınızda komut dosyasını değiştirin. –

1

Olabilir belki de küresel göndericiyi kaldırın ve sadece bir tanesinin çalışmasına izin verilsin mi? Şunun gibi:

$(function(){ 

$("form").validate({ 
    submitHandler: function(form) { 
    $("body").append("<p>validate</p>"); 
    form.submit(); 
    } 
}); 

$('#myform').off('submit') 

$("#myform").submit(function(e){ 
    $("body").append("<p>validate</p>"); 
    $("body").append("<p>other handler</p>"); 
    e.preventDefault(); 
    }); 
}); 

Sen de diğer işleyicisinden doğrulama aramak zorunda kalacak, ama bu çok acı olmayabilir, sadece form.valid() çağrı İşte

0

bir Working Fiddle Ve kod olun aşağıdaki gibidir.

$(function() { 

    $("form").validate({ 
    submitHandler: function(form) { 
     $("body").append("<p>validate</p>"); 

     if ($(form).data('has-customSubmit-event') === true) { 
     $(form).trigger('customSubmit'); // trigger your custom submit. 
     } else { 
     form.submit(); 
     } 
    } 
    }); 

    $('#myform').data('has-customSubmit-event', true); // add a pointer to say there is a custom handler for this form, 

    $("#myform").on('customSubmit', function(e) { 
    $("body").append("<p>other handler</p>");  
    //$(this).submit(); // if you want to submit this form. 
    }); 

}); 

fikri onun geçerli eklenti en yani form.submit(); göndermek ancak özel mantığı çalıştırmak yapmak ve sonra da göndermek veya göndermek yok yoksa bu form için diyerek bir işaretçi eklemektir.

bahsediyorum ben işaretçi eklentisinde Şimdi bu

$('#myform').data('has-customSubmit-event', true);

bu formu, başka gönderirim sonra yürütmek için özel bir işleyici varsa biz onay söyleyerek eğer olabilir işleyicisi göndermektir form.

if ($(form).data('has-customSubmit-event') === true) { 
    $(form).trigger('customSubmit'); // trigger your custom submit. 
} else { 
    form.submit(); 
} 

Ayrıca yolu doğrulama eklentisi böyle $("form").validate({.. ekliyoruz. Bu yüzden, bunu öğrendim, bu yalnızca ilk form için gönderme işleyici olayını tetikleyecekti (Emin değil neden, Fiddle With Issue).

Yani Example Fiddle

+0

Bu çözüm hakkında düşündüm, temel sorun sadece form validater ise ikinci işleyiciyi çalıştırmak gerekir, bu yüzden ben olay köpüren kontrol edebilirseniz oppositr sipariş tercih ederim. – Tobia

+0

Bu iyi tasarlanmış akış değildir. Böyle bir şey yapmak istiyorsanız, bir doğrulama fonksiyonu yazın ve onu adlandırın, tasarımınız işlem sırası için risk oluşturur. –

+0

@Tobia Cevabımı güncelledim, bunun sizin için uygun olup olmadığını kontrol et. –

İlgili konular