Как использовать событие keydown в jquery, не затрагивая все ключи? - PullRequest
0 голосов
/ 04 июля 2018

Я должен запретить обновление страницы, нажав F5 или Ctrl + F5 . Я готовлю следующий код для достижения этой цели, но когда я нажимаю любую клавишу на странице, функция работает и не может заполнить любое текстовое поле или нажимать какие-либо другие клавиши на странице. Как я могу решить эту проблему?

      $(" * ").bind('keydown', 'F5', function (e) {
        e.preventDefault();
        abp.message.confirm("Are You Sure To Refresh This Page?",
            function (isConfirm) {
                if (isConfirm) {
                    window.location = "NewForm?id=" + $("#Id").val();
                }
            });
    });

Ответы [ 5 ]

0 голосов
/ 04 июля 2018

Судя по внешнему виду вопроса и определенным комментариям (ваше требование четко не указано в вопросе), я полагаю, это то, что вы должны сделать.

$(document).bind('keydown', function (e) {
        if(e.keyCode == 116 || (e.keyCode == 116 && e.ctrlKey)){
            e.preventDefault(); // Prevent default bevaior only if F5 or Ctrl+F5 [thanks to the first two commenters (y) :)]
            //This is from your original post
            abp.message.confirm("Are You Sure To Refresh This Page?",
                function (isConfirm) {
                    if (isConfirm) {
                        window.location = "NewForm?id=" + $("#Id").val();
                    }
            });
        }
    });
});

Проверьте эту скрипку , чтобы увидеть это в действии.

Пожалуйста, внимательно прочитайте Как мне задать хороший вопрос? - Справочный центр - Переполнение стека .

0 голосов
/ 04 июля 2018

console.d = function(log) {
  $('#console').text(log);
}

var callback = function(e) {
  console.log(e.type, e);
  var text = e.type;
  var code = e.which ? e.which : e.keyCode;
  if (13 === code) {
    text += ': ENTER';
  } else {
    text += ': keycode ' + code;
  }
  console.d(text);
};

$('#input').keydown(callback);
$('#input').keypress(callback);
$('#input').keyup(callback);

$('.keydown').click(function(e) {
  var code = $(this).data('code');
  $('#input').trigger(
    jQuery.Event('keydown', {
      keyCode: code,
      which: code
    })
  );
});
$('.keypress').click(function(e) {
  var code = $(this).data('code');
  $('#input').trigger(
    jQuery.Event('keypress', {
      keyCode: code,
      which: code
    })
  );
});
$('.keyup').click(function(e) {
  var code = $(this).data('code');
  $('#input').trigger(
    jQuery.Event('keyup', {
      keyCode: code,
      which: code
    })
  );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<p><label>input: <input type="text" name="foo" id="input" value="" /></label></p>

<p>
  <button class="keydown" data-code="13">Trigger keydown Enter</button>
  <button class="keypress" data-code="13">Trigger keypress Enter</button>
  <button class="keyup" data-code="13">Trigger keyup Enter</button>
</p>

<p>
  <button class="keydown" data-code="65">Trigger keydown 'a'</button>
  <button class="keypress" data-code="65">Trigger keypress 'a'</button>
  <button class="keyup" data-code="65">Trigger keyup 'a'</button>
</p>

<hr />

<div id="console"></div>
0 голосов
/ 04 июля 2018

Правильный код ключа для F5 равен 116 :

    $(function () {  
        $(document).keydown(function (e) {  
             if((e.which || e.keyCode) == 116){
              if(confirm("Your confirmation message...")){
                 e.preventDefault(); 
              }
             }
        });  
    }); 
<body>  
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>  
</body> 

Для полноты добавлено

Может комбинировать e.ctrlKey, чтобы обнаружить нажатие комбинации Ctrl + F5 . Выглядит как

if (evtobj.keyCode == 116 && evtobj.ctrlKey) alert("Ctrl+F5"); 

найдено этой рабочей скрипки .

0 голосов
/ 04 июля 2018

Здесь вы пытаетесь идентифицировать событие функциональной клавиши F5, для которого вам нужны коды клавиш.

Если вы ссылаетесь здесь , код ключа для F5 будет 116 .

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

$(document).on("keydown", disableRefresh);

function disableRefresh(event){
   if(event.keyCode == 116){
     if confirm("whatever you want to confirm"){
       event.preventDefault(); 
     }
}
0 голосов
/ 04 июля 2018

$(document).keydown(function(e){
    if(e.keyCode == 116){
         e.preventDefault();
         alert("Hello!");
         return false;
    }
})
...