Мне нужна функция для выполнения, когда пользователь вводит что-то в поле ввода. Функция должна сделать поле ввода недоступным для редактирования в течение 3 секунд, прежде чем снова сделать поле ввода редактируемым. У меня есть функция ниже, но она не работает вообще. Мне интересно, что я сделал не так и как это исправить?
function makeUnedit (id) {
setTimeout(function(){ document.getElementById(id).readOnly = false; }, 3000);
success:function(setTimeout) {
document.getElementById(id).readOnly = true;
}
}
Редактировать:
Это работает, но если вы вводите спам в поле ввода, как если бы вы вводили 1 вход в 100 миллисекунд или около того, он будет переопределять его, делая readOnly true все время, если вы продолжаете рассылать спам с такой скоростью.
document.getElementById(id).readOnly = true;
setTimeout(function(){ document.getElementById(id).readOnly = false; }, 1500);
Это будет работать:
function makeUnedit (id) {
document.getElementById(id).readOnly = true;
setTimeout(function(){
document.getElementById(id).readOnly = false;
}, 3000);
}
Обратите внимание, что функция, которую вы передаете в качестве аргумента setTimeout(argument, milliseconds)
будет вызван через x миллисекунд.
success:
это бессмысленный параметр здесь и должен был вызвать синтаксическую ошибку.
window.onload = function() {
function makeUnedit (id) {
document.getElementById(id).readonly = true;
window.setTimeout(function() {
document.getElementById(id).readonly = false;
}, 3000);
}
document.getElementById("id").onfocus = function() { makeUnedit ("id") };
};
<input type="text" id="id"/>
По моим расчетам, вы используете неправильное ключевое слово. Так как в любом случае нет необходимости в таком утверждении, вот решение.
function makeUnedit (id) {
document.getElementById(id).readonly = true;
window.setTimeout(function() {
document.getElementById(id).readonly = false;
}, 3000);
}
Добавьте код ниже для вашего обработчика:
document.getElementById(id).onfocus = function() { makeUnedit(id) };