Me gusta agregar uno que también funcione con la creación dinámica de DOM javascript como D3 donde es imposible agregar:
para evitar acciones en un elemento DOM de entrada HTML, agregue readonly a la clase:
var d = document.getElementById("div1");
d.className += " readonly";
O en D3:
.classed("readonly", function(){
if(condition){return true}else{return false}
})
Y agregar a CSS o menos:
.readonly {
pointer-events: none;
}
Lo bueno de esta solución es que se puede activar y desactivar dinámicamente en una función para que pueda integrarse, por ejemplo, en D3 en el momento de la creación (no es posible con el atributo "readonly" único).
para eliminar el elemento de la clase:
document.getElementById("MyID").className =
document.getElementById("MyID").className.replace(/\breadonly\b/,'');
o usa Jquery:
$( "div" ).removeClass( "readonly" )
o alternar la clase:
$( "div" ).toggleClass( "readonly", addOrRemove );
Para estar completo, buena suerte = ^)
keydown()o eskeypress()más eficaz?