Maison > Questions et réponses > le corps du texte
Je souhaite désactiver le bouton d'envoi du formulaire jusqu'à ce que tous les champs de saisie soient remplis et qu'il n'y ait aucune erreur.
<button :disabled="disabled" type="submit" value="Submit" > Suggest </button> let disabled = ref(true); let error = ref(false); nextTick(() => { let inputs = Array.from(document.getElementsByClassName("form__input")); if (!error.value) { inputs.forEach((input) => { if (input.value === "") { disabled.value = true; } else { disabled.value = false; } }); } })
Le bouton est désactivé par défaut, mais il ne « s'activera » pas de lui-même une fois les conditions déjà mentionnées remplies.
Jusqu'à présent, j'utilise des hooks de cycle de vie assistés nextTick()
, ce qui ne m'aide évidemment pas dans ce cas.
L'état "désactivé" sera mis à jour dans la console, mais pas sur le DOM.
Comment puis-je résoudre ce problème ?
Bravo
P粉1808446192023-11-14 00:30:04
Vous devriez peut-être utiliser v-model
、compulated
或@input
pour écouter les événements et modifier l'état du bouton désactivé.
P粉8284636732023-11-14 00:15:17
La solution la plus simple consiste à utiliser la valeur 计算
pour définir l'état désactivé du bouton - en fonction de la valeur d'entrée - si certains sont vides, le bouton est désactivé
Ceci est un exemple basique
const { ref, createApp, computed } = Vue; createApp({ setup() { const input1 = ref(""); const input2 = ref(""); const input3 = ref(""); // disabled is true if ANY input is empty string const disabled = computed(() => !input1.value || !input2.value || !input3.value); const clicked = () => console.log('clicked'); return { input1, input2, input3, disabled, clicked }; } }).mount('#app');
ssscccInput 1:
Input 2:
Input 3: