2013-02-22 24 views
8

göndermekten onclick olayı ile gönder düğmesi "işlevini ve ayrıca onclick olayını kaldırır, ancak form yine de gönderilir. Göndermeden önce onclick olayını el ile kaldırın sorunu çözecektir. Ancak bu temel işlevler ve onu kaldırmak istemiyorum.önle Ben göndermekten onclick olayı ile Gönder düğmesini önlemek istiyorsanız

DÜZENLEME:

Kesinlikle onclick seçicisi neden oluyor .. Nasıl anında onclick olayını yeniden benim jQuery komut dosyası zorlayabilirsiniz? jQuery kodundan önce ekleyerek: $j('form#userForm .button').attr('onclick',''); ... .. sorunu çözecektir ancak benim doğrulama bir artık çalışmaz

+0

Gerçekten .. formun teslim işleyicisi bu yapmalıyım formun odak noktası olduğunda ... bu işleyiciyi tetikleyecek ve tıklamanızın değil, bu nedenle onayınız –

cevap

18

Bir parametre olarak etkinlik eklemek gerekir: Her zaman

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.preventDefault(); 
     $j('form#userForm .button').attr('onclick','').unbind('click'); 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
    } 
}); 

Ayrıca val() bir dize döndürür, bu yüzden bir sayıyla karşılaştırmadan önce bir sayıya dönüştürmek için iyi bir uygulama olurdu ve gerçekten öğesinin içinde gerçekten çalıştığını veya işlevini kullanmanız gerektiğinden emin değilim. this yerine?

jQuery 1.7+ kullanıyorsanız, bunun için on() ve off() kullanmayı düşünmelisiniz.

+0

thx bypass edilecektir, kodu düzenledim ama işe yaramıyor .. Onclick olayı prevent.default kopuyor ...? –

+0

Satır içi onclick, her zaman ilk önce yürütür ve bu gibi bir satır içi işlevi ve bir olay işleyicisi olması için gerçekten iyi bir uygulama değildir, muhtemelen bunu yeniden düşünmeli ve yalnızca olay işleyicisine gitmeli ve "myvalidator" öğesini çağırın.() harici olay işleyicisinden. – adeneo

+1

çok thx! Bunu şu ana kadar buldum;) ancak virtüemartın çekirdek kodlarını kırmak istemiyorum .. Bu yüzden neden böyle çözmeyi deniyorum! –

0

fonksiyon/etkinlik argümanlar olduğunu unutmayın, ancak parametrelerini belirlemek gerekir: Bu şekilde

$("#thing").click(function(e) { 
    e.preventDefault(); 
}); 

, gönderme durdurulur ve böylece bunu conditionalise edebilirsiniz.

12

Temel olarak, düğme türünü type="submit"'dan type="button"'a değiştirirseniz, bu düğme formu göndermez ve geçici çözümlere gerek yoktur.

Bu yardımcı olur umarım.

+0

çok thx ... ancak onclick olayı emin olmak için çok eminim –

+0

Bu cevap benim durumumu çözdü, benim için bu daha evrensel olduğu gibi doğru cevap olarak işaretlenmiş olmalı :) harika teşekkürler! –

+0

JQuery doğrulama kullanıyorum. "=" Düğmesi "olan bir düğmem var; ancak doğrulama başarısız olduğunda form geri bildirimleri hala devam ediyor! [Burada] (http://stackoverflow.com/questions/29890544/page-still-postbacks-after-jquery-validation-fail/29890940#29890940) benim sorum. – sohaiby

0

En iyi yol, formdaki gönderme olay işleyicinizin içindeki her şeyi yapmaktır. onclick satır içi çıkarın ve göndermek işlevi içinde çalıştırmak ben daha kolay bir yolu olduğuna inanıyoruz

$j('#userForm').submit(function(e) { 
    if (+$j("#zip_field").val() > 1000){ 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
     return false; 
    } 
    return myValidator(userForm, 'savecartuser'); 
}); 
-2

: Enter'a eğer

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.stopPropagation(); 
    } 
});