Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.11.2014, 11:21
Новичок на форуме
Отправить личное сообщение для loveaboveall Посмотреть профиль Найти все сообщения от loveaboveall
 
Регистрация: 29.03.2014
Сообщений: 7

Confirm или event keyboard
Есть серьезная проблема! Есть конфирм окошко, и оно прекрасно, с одним но... перед его появлением есть другое окно, чтобы его закрыть пользователь нажимает клавишу на клавиатуре. Так как в конфирме фокус сразу стоит на кнопке OK, то когда пользователь нажимает кнопку, в окне предшедсвующем конфирм, конфирм сразу срабатывает (нажали OK), так как не успевает клавиша отпустится. Из этого вопрос, или как убрать фокус на кнопках в конфирме (подразумеваю что никак), или как сделать обработчик, который будет проверять отпущены ли все клавиши клавиатуры, а после того как отпущены - выводить конфирм. Кто очень хорошо шарит в event ?
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2014, 13:15
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Есть вариант починить клавиатуру. Не должно ничего такого быть (у меня, по крайней мере, ни в FF, ни в опере, ни даже в IE нет).
Ответить с цитированием
  #3 (permalink)  
Старый 17.11.2014, 13:28
Новичок на форуме
Отправить личное сообщение для loveaboveall Посмотреть профиль Найти все сообщения от loveaboveall
 
Регистрация: 29.03.2014
Сообщений: 7

firefox 33. если зажать и держать клавишу , то при появлении конфирм он автоматически срабатывает.
Ответить с цитированием
  #4 (permalink)  
Старый 17.11.2014, 13:47
Новичок на форуме
Отправить личное сообщение для loveaboveall Посмотреть профиль Найти все сообщения от loveaboveall
 
Регистрация: 29.03.2014
Сообщений: 7

да где угодно, в хроме тоже. (клавиша space)
Ответить с цитированием
  #5 (permalink)  
Старый 17.11.2014, 14:55
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 17.11.2014, 18:34
Новичок на форуме
Отправить личное сообщение для loveaboveall Посмотреть профиль Найти все сообщения от loveaboveall
 
Регистрация: 29.03.2014
Сообщений: 7

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


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

Последний раз редактировалось loveaboveall, 17.11.2014 в 21:34.
Ответить с цитированием
  #7 (permalink)  
Старый 18.11.2014, 06:05
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

С кнопконажимателями (программами которые имитируют юзера) такая байда постоянно происходит и приходится вводить задержки. Так и введите.
Ответить с цитированием
  #8 (permalink)  
Старый 18.11.2014, 10:32
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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

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

Последний раз редактировалось Erolast, 18.11.2014 в 10:35.
Ответить с цитированием
  #9 (permalink)  
Старый 18.11.2014, 11:12
Новичок на форуме
Отправить личное сообщение для loveaboveall Посмотреть профиль Найти все сообщения от loveaboveall
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 18.11.2014, 11:38
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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

Последний раз редактировалось Erolast, 18.11.2014 в 11:41.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Javascript чат-бот FanAizu Общие вопросы Javascript 5 30.01.2014 03:00
подключать jquery-ui.custom.js или jquery-ui.custom.min.js? Faab jQuery 4 11.10.2013 20:53
Кастомный селект, чекбокс, радио vostok Ваши сайты и скрипты 0 12.08.2013 00:33
event + setTimeout fsingle Events/DOM/Window 2 02.05.2012 09:07
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20