Farklı şeyleri işlemek için birden fazla gönderme düğmesine ihtiyaç duyduğum oldukça karmaşık bir durumum vardı. Örneğin, Kaydet ve Sil.
Temel, aynı zamanda mütevazi olduğu için, normal bir düğme yapamadım. Ama aynı zamanda html5 doğrulamasını kullanmak istedim.
Ayrıca, kullanıcının beklenen varsayılan gönderimi tetiklemek için enter tuşuna basması durumunda gönderme olayı geçersiz kılınmıştır; bu örnekte kaydedin.
Formun hem javascript ile / javascript olmadan hem de html5 doğrulamasıyla hem gönderme hem de tıklama olaylarıyla çalışabilmesi için gösterdiği çabalar.
jsFiddle Demo - Gönderme ve tıklama geçersiz kılmalarıyla HTML5 doğrulaması
xHTML
<form>
<input type="text" required="required" value="" placeholder="test" />
<button type="submit" name="save">Save</button>
<button type="submit" name="delete">Delete</button>
</form>
JavaScript
//wrap our script in an annonymous function so that it can not be affected by other scripts and does not interact with other scripts
//ensures jQuery is the only thing declared as $
(function($){
var isValid = null;
var form = $('form');
var submitButton = form.find('button[type="submit"]')
var saveButton = submitButton.filter('[name="save"]');
var deleteButton = submitButton.filter('[name="delete"]');
//submit form behavior
var submitForm = function(e){
console.log('form submit');
//prevent form from submitting valid or invalid
e.preventDefault();
//user clicked and the form was not valid
if(isValid === false){
isValid = null;
return false;
}
//user pressed enter, process as if they clicked save instead
saveButton.trigger('click');
};
//override submit button behavior
var submitClick = function(e){
//Test form validitiy (HTML5) and store it in a global variable so both functions can use it
isValid = form[0].checkValidity();
if(false === isValid){
//allow the browser's default submit event behavior
return true;
}
//prevent default behavior
e.preventDefault();
//additional processing - $.ajax() etc
//.........
alert('Success');
};
//override submit form event
form.submit(submitForm);
//override submit button click event
submitButton.click(submitClick);
})(jQuery);
Javascript'i kullanma uyarısı, kodunuzdaki her tarayıcıyı desteklemeden hata mesajlarını görüntülemek için tarayıcının varsayılan onclick'inin gönderme olayına yayılması gerektiğidir. Aksi takdirde, click olayı event.preventDefault () ile geçersiz kılınırsa veya false döndürülürse, asla tarayıcının gönderme olayına yayılmaz.
Dikkat çeken şey, bazı tarayıcılarda kullanıcı enter tuşuna bastığında form gönderimini tetiklemeyecek, bunun yerine formdaki ilk gönderme düğmesini tetikleyecektir. Bu nedenle tetiklemediğini göstermek için bir console.log ('form gönderme') vardır.