Necesito deshabilitar todos los botones que coincidan con el nombre de la clase y, después de que se ejecute la función, volver a habilitarlos. He intentado lo siguiente pero sin suerte.
let stb = document.getElementsByClassName("btn-st"); for (let i = 0; i < stb.length; i++) { stb.onclick = null; } // run some additional functions and enable stb.onclick = true;¿Qué me estoy perdiendo?
Necesitas pasar por stb nuevo:
let stb = document.getElementsByClassName("btn-st"); for (let i = 0; i < stb.length; i++) { stb[i].onclick = null; } // run some additional functions and enable for (let i = 0; i < stb.length; i++) { stb[i].onclick = true; } Sin embargo, tenga en cuenta que establecer el atributo onclick en null no deshabilitará el evento (consulte el comentario de @Jeremy Thille ).
Si desea deshabilitar un botón, debe establecer su propiedad disabled :
let stb = document.getElementsByClassName("btn-st"); for (let i = 0; i < stb.length; i++) { stb[i].disabled = true; } // run some additional functions and enable for (let i = 0; i < stb.length; i++) { stb[i].disabled = false; }Entonces, las dos cosas principales que faltan son document.getElementsByClassName("btn-st"); devuelve una matriz, por lo que cuando pasa por primera vez y deshabilita el .onclick , tendría que hacer:
let stb = document.getElementsByClassName("btn-st"); for (let i = 0; i < stb.length; i++) { stb[i].onclick = null; } Para la segunda parte, un par de personas han mencionado que configurar .onclick = true; Realmente no tiene sentido, por lo que debe configurar onclick en una función sin nombre con lo siguiente:
// run some additional functions and enable for (let i = 0; i < stb.length; i++) { stb[i].onclick = function() { // do things when this button is clicked }; }