如何防止输入被禁用?

How to prevent an input from being disabled?

我有一个 ID 为 my-field 的输入字段 <input>,某些插件在第一次转义后向其中添加了属性 disabled="disabled"

这是一个问题,所以我试图使用以下代码使禁用的属性远离它:

var input = document.getElementById("my-field");
document.addEventListener("change", input, function(){
    setTimeout(function() {
        input.disabled = false;
    }, 50)
});

但是它不起作用,我做错了什么?

编辑: 如下所示,我将布尔值更正为没有“”,但它不起作用。

可以这样设置

Vanilla Javascript

// Enable
document.getElementById("my-field").disabled = false;

// Disable
document.getElementById("my-field").disabled = true;

JQuery

// Enable
$("#my-field").prop( "disabled", false );

// Disable
$("#my-field").prop( "disabled", true );

如果您只想删除属性,请使用 removeAttribute 函数,如下所示:

document.querySelector('#my-field').removeAttribute('disabled')

至于你的解决方案,我建议监听元素的变化,而不是猜测超时,像这样:

new MutationObserver(([{ attributeName, target }]) =>
        attributeName === 'disabled' && target.removeAttribute('disabled')
    ).observe(document.querySelector('#my-field'), { attributes: true });

$("#my-field").removeAttr("disabled"); document.getElementById("my-field").removeAttribute("disabled")

使用jquery解决您的问题

启用: $("#element").prop( "disabled", false );

对于禁用: $("#element").prop( "disabled", true );

尝试重新定义 setAttribute 方法并在输入中禁用 属性,例如:

function removeDisabled(input) {
    input.disabled = false;
    input.removeAttribute('disabled');
    Object.defineProperties(input, {
        disabled: {
            get: function() { return false; }
        },
        setAttribute: {
            value: function() {}
        }
    })
}

removeDisabled(document.getElementById('my-field'))