J'ai un formulaire pour télécharger des images. J'aimerais désactiver le bouton d'envoi jusqu'à ce que l'utilisateur sélectionne une image à télécharger. J'aimerais le faire avec jQuery. Actuellement, j'ai un JavaScript qui empêche l'utilisateur de soumettre le formulaire plusieurs fois en le désactivant lors de l'envoi. Ce serait bien de combiner cette fonctionnalité avec la nouvelle.
Voici ce que j'ai maintenant:
<script type="text/javascript">
function submitonce(theform) {
//if IE 4+ or NS 6+
if (document.all || document.getElementById) {
//screen thru every element in the form, and hunt down "submit" and "reset"
for (i = 0; i < theform.length; i++) {
var tempobj = theform.elements[i]
if (tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset")
//disable em
tempobj.disabled = true
}
}
}
</script>
<form name="form" enctype="multipart/form-data" method="post" action="upload.php" onSubmit="submitonce(this)">
<input type="file" name="my_field" value="" />
<input type="submit">
</form>
Ce qui suit semble fonctionner de manière fiable dans Chrome et Firefox (Ubuntu 10.10), je ne peux pas vérifier sur les autres plates-formes pour le moment:
$(document).ready(
function(){
$('input:file').change(
function(){
if ($(this).val()) {
$('input:submit').attr('disabled',false);
// or, as has been pointed out elsewhere:
// $('input:submit').removeAttr('disabled');
}
}
);
});
<form action="#" method="post">
<input type="file" name="fileInput" id="fileInput" />
<input type="submit" value="submit" disabled />
</form>
<div id="result"></div>
Manière légèrement plus simple en utilisant prop () qui, à mon avis, est la méthode préférée pour le faire maintenant
$('input:file').on("change", function() {
$('input:submit').prop('disabled', !$(this).val());
});
Testé dans IE, Chrome et FireFox.
Essayer
$('#my_uploader').change(function() {
if($(this).val()) {
$('#my_submit_button').attr('disabled', '');
} else {
$('#my_submit_button').attr('disabled', 'disabled');
}
});
Si vous êtes fan d'expressions ternaires:
$(document).ready(function(){
var $submit = $('#submit_document');
var $file = $('#file_path');
$file.change(
function(){
$submit.attr('disabled',($(this).val() ? false : true));
}
);
});
Au lieu de désactiver la soumission, est-il potentiellement plus utile d'offrir des instructions si l'utilisateur appuie dessus sans sélectionner un fichier au préalable? Donc, ajoutez quelque chose comme ceci comme code onclick du submit?
var bFileEmpty = !document.getElementById('filControl').value; if (bFileEmpty) alert('Please select a file'); return !bFileEmpty;
Notez que votre contrôle de fichier aura besoin d’un identifiant ainsi que d’un nom.