Как предотвратить отключение входа? - PullRequest
0 голосов
/ 25 января 2020

У меня есть поле ввода <input> с идентификатором my-field , к которому какой-то плагин добавляет атрибут disabled="disabled" после первого выхода.

Это проблема, поэтому я ' я пытаюсь сохранить этот отключенный атрибут подальше с помощью кода ниже:

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

, но он не работает, что я делаю не так?

РЕДАКТИРОВАТЬ: как предложил ниже, я исправил логическое значение, чтобы не иметь "", но это не работает.

Ответы [ 5 ]

1 голос
/ 25 января 2020

Попробуйте переопределить метод 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'))
1 голос
/ 25 января 2020

Вы можете установить его следующим образом

Ваниль 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 );
0 голосов
/ 25 января 2020

Используйте jquery для решения вашей проблемы

Для включения: $ ("# element"). Prop ("отключено", false);

Для отключения: $ ("# element "). prop (" disabled ", true);

0 голосов
/ 25 января 2020

$ ( "# мое поле") removeAttr ( "отключено"). document.getElementById ( "мое поле"). removeAttribute ( "отключено")

0 голосов
/ 25 января 2020

Если вы просто хотите удалить атрибут, используйте функцию removeAttribute следующим образом:

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

Что касается вашего решения, я бы рекомендовал прослушивать изменения элемента, а не угадывать время ожидания примерно так:

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