Bir süre önce çok benzer bir şeye ihtiyacım vardı ... ve anladım.
Bu yüzden buraya koyduğum, herhangi bir doğrulama yapmadan JavaScript tarafından gönderilebilecek bir formun olması için hilelerimi nasıl yapacağım ve yalnızca kullanıcı bir düğmeye bastığında (genellikle bir gönderme düğmesi) doğrulama işlemini gerçekleştiriyorum.
Örnek için, sadece iki alan ve bir gönderme düğmesi ile minimal bir form kullanacağım.
Ne istediğini hatırla: JavaScript'ten herhangi bir kontrol yapmadan gönderilebilmelidir. Ancak, kullanıcı böyle bir düğmeye basarsa, doğrulama yapılmalıdır ve form yalnızca doğrulamayı geçerse gönderilmelidir.
Normalde hepsi bunun yakınındaki bir şeyden başlayacaktır (önemli olmayan tüm ekstra şeyleri kaldırdım):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
Form etiketinin nasıl olmadığını görün onsubmit="..."
(bunun olmaması için bir koşul olduğunu unutmayın).
Sorun, formun her zaman gönderilmesidir, ister onclick
iade true
ister olursa olsun false
.
Şunu değiştirirsem type="submit"
için type="button"
, bu işin görünüyor ama değil. Asla formu göndermez, ancak bu kolayca yapılabilir.
Sonunda bunu kullandım:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
Ve function Validator
nerede return True;
, ben de buna benzer bir şey, bir JavaScript gönderme cümle eklemek:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
id=""
Sadece JavaScript içindir getElementById
, name=""
o POST verilerine görünmesini sadece içindir.
Bu şekilde ihtiyacım olduğu gibi çalışıyor.
Bunu sadece onsubmit
formda herhangi bir işleve ihtiyaç duymayan insanlar için koyuyorum , ancak kullanıcı tarafından bir düğmeye basıldığında bazı doğrulamalar yapıyorum.
Form etiketinde neden yeniden gönderim yapmaya ihtiyacım yok? Kolay, diğer JavaScript bölümlerinde bir gönderme yapmak gerekir ama herhangi bir doğrulama olmasını istemiyorum.
Nedeni: Kullanıcı gönderme gerçekleştirir ve istiyorum doğrulama yapılması gerekir, ancak JavaScript ise bazen bu tür doğrulama önlemek önlemek sırasında gönderme yapmak gerekir.
Garip gelebilir, ancak örneğin düşünürken değil: bir Oturum Açma ... bazı kısıtlamalar ile ... PHP oturumlarının kullanılmasına izin verilmemesi gibi ve her iki çerez de izin verilmez!
Bu nedenle, herhangi bir bağlantının bu form gönderisine dönüştürülmesi gerekir, böylece giriş verileri kaybolmaz. Henüz giriş yapılmadığında da çalışmalıdır. Bu nedenle bağlantılarda doğrulama yapılmamalıdır. Ancak kullanıcı hem alan hem de kullanıcı alanı girmediyse kullanıcıya bir mesaj sunmak istiyorum. Eğer biri eksikse, form gönderilmemelidir! sorun var.
Soruna bakın: bir alan boşken form gönderilmemelidir, ancak kullanıcı bir düğmeye basmışsa, JavaScript kodu ise gönderilebilmelidir.
Ben üzerinde çalışmaya yaparsanız onsubmit
form etiketi üzerinde, bunun kullanıcı veya başka bir JavaScript olup olmadığını bilmek gerekir. Hiçbir parametre iletilemediğinden, doğrudan mümkün değildir, bu nedenle bazı insanlar doğrulama yapılmasının gerekip gerekmediğini söylemek için bir değişken ekler. Doğrulama fonksiyonunda ilk şey, değişken değer, vb. Kontrol etmektir ... Çok karmaşık ve kod gerçekten ne istediğini söylemiyor.
Dolayısıyla çözüm form etiketinde gönderim yapmak değildir. Insead, düğmeye gerçekten ihtiyaç duyulan yere koydu.
Diğer tarafta, neden onubmit kod koymak çünkü kavramsal olarak onubmit doğrulama istemiyorum. Gerçekten düğme doğrulaması istiyorum.
Sadece kod daha açık değil, aynı zamanda olması gereken yer. Şunu unutmayın: - JavaScript'in formu doğrulamasını istemiyorum (her zaman sunucu tarafından PHP tarafından yapılmalıdır) - Kullanıcıya tüm alanların boş olmaması gerektiğini bildiren bir mesaj göstermek istiyorum, bu JavaScript (istemci yan)
Öyleyse neden bazı insanlar bir sadakat doğrulamasıyla yapılmalı? Hayır, kavramsal olarak müşteri tarafında bir geçerlilik doğrulaması yapmıyorum. Ben sadece bir düğmeye basıldığında bir şey yapıyorum, neden sadece uygulanmasına izin vermiyorsun?
Bu kod ve stil hile mükemmel yapar. Ben sadece koymak formu göndermek için gereken herhangi bir JavaScript:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
Ve bu, ihtiyacım olmadığında doğrulamayı atlıyor. Sadece formu gönderir ve farklı bir sayfa vb. Yükler.
Ancak kullanıcı gönder düğmesini tıklarsa (aka type="button"
değil type="submit"
), formun gönderilmesine izin verilmeden önce doğrulama yapılır ve geçerli değilse gönderilmez.
Umarım bu başkalarına uzun ve karmaşık kod denememelerine yardımcı olur. Gerekmiyorsa kullanmayın onsubmit
ve kullanın onclick
. Ama sadece değiştirmeyi unutmayın type="submit"
etmek type="button"
ve yapılacak lütfen unutma submit()
JavaScript ile.