Vue 3 Composition API – Schaltfläche zum Senden des Formulars deaktivieren, bis alle Bedingungen erfüllt sind
P粉360266095
P粉360266095 2023-11-13 09:41:53
0
3
1030

Ich möchte die Schaltfläche zum Senden des Formulars deaktivieren, bis alle Eingabefelder ausgefüllt sind und keine Fehler mehr vorliegen.

<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;
      }
    });
  }
})

Die Schaltfläche ist standardmäßig deaktiviert, sie wird sich jedoch nicht selbst „aktivieren“, sobald die bereits genannten Bedingungen erfüllt sind.

Bisher verwende ich Assisted Lifecycle Hooks nextTick(), was mir in diesem Fall offensichtlich nicht hilft.

Der Status „deaktiviert“ wird in der Konsole aktualisiert, jedoch nicht im DOM.

Wie kann ich dieses Problem lösen?

Prost

P粉360266095
P粉360266095

Antworte allen(3)
P粉180844619

也许您应该使用v-modelcompulated@input来监听事件并更改按钮禁用状态。

P粉828463673

最简单的解决方案是使用计算值来设置按钮的禁用状态 - 基于输入值 - 如果有任何为空,则按钮被禁用

这是一个基本示例

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');

Input 1:
Input 2:
Input 3:
尊渡假赌尊渡假赌尊渡假赌

。。。。测试

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!