Undisabled eines Buttons durch JavaScript?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

HTML:

<button id="btn1" disabled>Action</button>
<button onclick="enableBtn('#btn1')">Activate</button>

JavaScript:

const enableBtn = (e) => {
  let btn = document.querySelector(e);
  btn.removeAttribute('disabled');
}

Die Funktion beschränkt sich nicht auf ein konkretes Element, sondern ist mithilfe des Funktionsparameter (e) beliebig oft wiederverwendbar. Falls du also weitere deaktivierte Element hast, können diese auch mit dieser Funktion aktiviert werden.

Beispiel - Mehrere deaktivierte Buttons:

<button id="btn1" disabled>Action 1</button> 
<button id="btn2" disabled>Action 2</button> 

Buttons aktivieren:

<button onclick="enableBtn('#btn1')">Activate 1</button>
<button onclick="enableBtn('#btn2')">Activate 2</button>

Die Funktion kann auch beliebig erweitert werden, in dem man z.B. mit einer if-Bedingung abfragt, ob der Button überhaupt „disabled“ ist oder nicht. Je nach Zustand wird dieser dann entweder aktiviert, deaktiviert oder es passiert nichts.

LG medmonk

Woher ich das weiß:Berufserfahrung – UI/UX Designer, Full-Stack Developer

Grundsätzlich sieht das gar nicht so falsch aus, was du da gemacht hast. Du musst jedoch auf ein paar Dinge aufpassen.

Mit folgendem Code sollte es funktionieren:


function Test() {
  let button = document.getElementById('button');
  button.disabled = false;
}
Erklärung: die Funktion heißt getElementById (beachte die Groß- & Kleinschreibung)
Wenn du "let" zur Definition von Variablen benutzt musst du darauf achten dass diese nur innerhalb eines Blocks verfügbar sind. Kurz gesagt wenn du das außerhalb der Funktion definierst, ist es innerhalb der Funktion nicht verfügbar. Also entweder die Definition auch in die Funktion packen oder stattdessen "var" verwenden.
Woher ich das weiß:Berufserfahrung – Fullstack Webdeveloper/in
medmonk  19.06.2023, 09:13
Kurz gesagt wenn du das außerhalb der Funktion definierst, ist es innerhalb der Funktion nicht verfügbar.

Dem ist nicht so. In einer Funktion kann auf außen definierte Variablen (global scope) zugegriffen werden, während Variablen, die innerhalb einer Funktion definiert wurden, auch nur in dieser verfügbar sind (block scope).

// global scope = Variable ist überall (global) verfügbar 
let button = document.querySelector('#button');

const test = () => {
  // block scope = Variable nur in diesem Block verfügbar
  let x = 1;
  button.disabled = false;
}

In JavaScript sollte man das Keyword var möglichst gar nicht mehr verwenden, da jenes recht fehleranfällig ist (Stichwort: Scoping). Stattdessen je nach Anwendungsfall mit let und const arbeiten. let immer dann, wenn sich der Wert ändern kann und darf, const hingegen, wenn dies nicht der Fall ist oder nicht der Fall sein sollte.

Der verlinkte Artikel ist zwar schon etwas älter, dort wird es aber nochmal etwas ausführlicher an einzelnen Beispielen erläutert. Falls also Interesse besteht, einfach mal durchlesen und die Code-Beispiele anschauen.

LG medmonk

1
Hwush 
Fragesteller
 19.06.2023, 16:31
@medmonk

Leider funktioniert es nicht mit dem Quers Selectir und es wird die Fehler Meldung: Cannot set properties of null (setting 'disabled ' ), ausgegeben. Weiß jemand an was dies liegt?

0