17.11.2014, 11:21
|
Новичок на форуме
|
|
Регистрация: 29.03.2014
Сообщений: 7
|
|
Confirm или event keyboard
Есть серьезная проблема! Есть конфирм окошко, и оно прекрасно, с одним но... перед его появлением есть другое окно, чтобы его закрыть пользователь нажимает клавишу на клавиатуре. Так как в конфирме фокус сразу стоит на кнопке OK, то когда пользователь нажимает кнопку, в окне предшедсвующем конфирм, конфирм сразу срабатывает (нажали OK), так как не успевает клавиша отпустится. Из этого вопрос, или как убрать фокус на кнопках в конфирме (подразумеваю что никак), или как сделать обработчик, который будет проверять отпущены ли все клавиши клавиатуры, а после того как отпущены - выводить конфирм. Кто очень хорошо шарит в event ?
|
|
17.11.2014, 13:15
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Есть вариант починить клавиатуру. Не должно ничего такого быть (у меня, по крайней мере, ни в FF, ни в опере, ни даже в IE нет).
|
|
17.11.2014, 13:28
|
Новичок на форуме
|
|
Регистрация: 29.03.2014
Сообщений: 7
|
|
firefox 33. если зажать и держать клавишу , то при появлении конфирм он автоматически срабатывает.
|
|
17.11.2014, 13:47
|
Новичок на форуме
|
|
Регистрация: 29.03.2014
Сообщений: 7
|
|
да где угодно, в хроме тоже. (клавиша space)
|
|
17.11.2014, 14:55
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
если зажать и держать клавишу , то при появлении конфирм он автоматически срабатывает.
|
Ну так коли держишь - конечно же сработает, все логично.
Если сильно не нравится и подключен jQuery, то можно как-то так:
<script type="text/javascript" src="https://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
<script>
$(document).one("keyup", function(event) {
if (event.keyCode == 13) // Enter
execAfter();
});
alert("!");
function execAfter() {
confirm("?");
}
</script>
Последний раз редактировалось Erolast, 18.11.2014 в 11:36.
|
|
17.11.2014, 18:34
|
Новичок на форуме
|
|
Регистрация: 29.03.2014
Сообщений: 7
|
|
не - не, это слишком просто) не под мой случай, у меня другой случай. фишка чтобы понять момент когда не нажата никакая клавиша! тоесть условие такое ...
function test(){
if (ненажата_никакая_клавиша) {
делай код
в нашем случае покажи конфирм
} else {
test(); // или setTimeout(test,время);
return false;
}
};
вот как сформировать условие - ненажата_никакая_клавиша
Последний раз редактировалось loveaboveall, 17.11.2014 в 21:34.
|
|
18.11.2014, 06:05
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от loveaboveall
|
так как не успевает клавиша отпустится.
|
Пивом залили?
Когда видно, то видноооооооооооооооооооо.. ...... а когда не видно, происходит то же самое. Если в момент пока юзер держит нажатой кнопку подменить диалог ггггггггг подменили гггггггг - то остаток строки пойдет в следующее окно.
С кнопконажимателями (программами которые имитируют юзера) такая байда постоянно происходит и приходится вводить задержки. Так и введите.
|
|
18.11.2014, 10:32
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
это слишком просто
|
Что значит "слишком просто"? В программировании, скажу по секрету, чем проще - тем лучше.
Цитата:
|
вот как сформировать условие - ненажата_никакая_клавиша
|
Никак. Можно провесить обработчики событий keydown/keyup документа, и в них писать/стирать значение куда-нибудь в переменную. Но зачем этот изврат, когда я тебе рабочее решение дал?
Последний раз редактировалось Erolast, 18.11.2014 в 10:35.
|
|
18.11.2014, 11:12
|
Новичок на форуме
|
|
Регистрация: 29.03.2014
Сообщений: 7
|
|
Сообщение от Erolast
|
Никак.
|
Вот! Ответ на именно то, что я спрашивал, те варианты - не то , что я спрашивал. Значит все-таки нет универсального решения (извраты не всчет).
сейчас реализовал так:
function test(){
if (window.event && (window.event.type === 'keydown' ||
window.event.type ==='keypress'))
{
setTimeout(function(){test,1500);
return false;
}
if (confirm(текст)){
код
}
};
срабатывает только раз, при последующем вызове из settimeout уже не видит event (если клавиша будет нажата более полторы секунды сработает true в confirm)
Почему не годятся ваши варианты, потому что суть - сделать отсрочку выполнения кода, при этом бесконечно ждать, до тех пор пока не отпустится клавиша и тогда продолжить выполнять.
Последний раз редактировалось loveaboveall, 18.11.2014 в 11:14.
|
|
18.11.2014, 11:38
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
сделать отсрочку выполнения кода, при этом бесконечно ждать, до тех пор пока не отпустится клавиша и тогда продолжить выполнять.
|
А у меня что, по-твоему? Метод jQuery one провешивает одноразовый обработчик события.
Цитата:
|
сейчас реализовал так:
|
Тут как минимум ошибка синтаксиса в пятой строке.
Последний раз редактировалось Erolast, 18.11.2014 в 11:41.
|
|
|
|