Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Confirm или event keyboard (https://javascript.ru/forum/events/51717-confirm-ili-event-keyboard.html)

loveaboveall 17.11.2014 11:21

Confirm или event keyboard
 
Есть серьезная проблема! Есть конфирм окошко, и оно прекрасно, с одним но... перед его появлением есть другое окно, чтобы его закрыть пользователь нажимает клавишу на клавиатуре. Так как в конфирме фокус сразу стоит на кнопке OK, то когда пользователь нажимает кнопку, в окне предшедсвующем конфирм, конфирм сразу срабатывает (нажали OK), так как не успевает клавиша отпустится. Из этого вопрос, или как убрать фокус на кнопках в конфирме (подразумеваю что никак), или как сделать обработчик, который будет проверять отпущены ли все клавиши клавиатуры, а после того как отпущены - выводить конфирм. Кто очень хорошо шарит в event ?

Erolast 17.11.2014 13:15

Есть вариант починить клавиатуру. Не должно ничего такого быть (у меня, по крайней мере, ни в FF, ни в опере, ни даже в IE нет).

loveaboveall 17.11.2014 13:28

firefox 33. если зажать и держать клавишу , то при появлении конфирм он автоматически срабатывает.

loveaboveall 17.11.2014 13:47

да где угодно, в хроме тоже. (клавиша space)

Erolast 17.11.2014 14:55

Цитата:

если зажать и держать клавишу , то при появлении конфирм он автоматически срабатывает.
Ну так коли держишь - конечно же сработает, все логично.

Если сильно не нравится и подключен 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>

loveaboveall 17.11.2014 18:34

не - не, это слишком просто) не под мой случай, у меня другой случай. фишка чтобы понять момент когда не нажата никакая клавиша! тоесть условие такое ...
function test(){
   if (ненажата_никакая_клавиша) {
     делай код
     в нашем случае покажи конфирм
   } else {
       test(); // или setTimeout(test,время);
       return false;
   }
};


вот как сформировать условие - ненажата_никакая_клавиша

kostyanet 18.11.2014 06:05

Цитата:

Сообщение от loveaboveall
так как не успевает клавиша отпустится.

Пивом залили?

Когда видно, то видноооооооооооооооооооо.. ...... а когда не видно, происходит то же самое. Если в момент пока юзер держит нажатой кнопку подменить диалог ггггггггг подменили гггггггг - то остаток строки пойдет в следующее окно.

С кнопконажимателями (программами которые имитируют юзера) такая байда постоянно происходит и приходится вводить задержки. Так и введите.

Erolast 18.11.2014 10:32

Цитата:

это слишком просто
Что значит "слишком просто"? :blink: В программировании, скажу по секрету, чем проще - тем лучше.

Цитата:

вот как сформировать условие - ненажата_никакая_клавиша
Никак. Можно провесить обработчики событий keydown/keyup документа, и в них писать/стирать значение куда-нибудь в переменную. Но зачем этот изврат, когда я тебе рабочее решение дал?

loveaboveall 18.11.2014 11:12

Цитата:

Сообщение от Erolast (Сообщение 341534)
Никак.

Вот! Ответ на именно то, что я спрашивал, те варианты - не то , что я спрашивал. Значит все-таки нет универсального решения (извраты не всчет).

сейчас реализовал так:
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)

Почему не годятся ваши варианты, потому что суть - сделать отсрочку выполнения кода, при этом бесконечно ждать, до тех пор пока не отпустится клавиша и тогда продолжить выполнять.

Erolast 18.11.2014 11:38

Цитата:

сделать отсрочку выполнения кода, при этом бесконечно ждать, до тех пор пока не отпустится клавиша и тогда продолжить выполнять.
А у меня что, по-твоему? Метод jQuery one провешивает одноразовый обработчик события.
Цитата:

сейчас реализовал так:
Тут как минимум ошибка синтаксиса в пятой строке.


Часовой пояс GMT +3, время: 08:27.