JQuery-热键和Windows提示问题

时间:2009-07-13 04:51:47

标签: javascript jquery windows hotkeys prompt

参考http://jshotkeys.googlepages.com/test-static-01.html 我尝试实现这个强大的工具并面临一些问题。

每当我点击Ctrl S时,它会弹出一个窗口提示,询问我是否要保存我的testing.html

我想忽略Windows提示符。

我想要的很简单: 1.当人们点击保存按钮/使用键盘上的快捷键ctrl s

  1. 脚本需要进行Create()检查

  2. 如果为true,则继续提交表单,如果为false,则停止提醒请输入问题,重点关注txtQuestion,不要再采取任何进一步行动。

  3. 以下是完整的源代码供参考:     输入

    <html>
    <head>
        <style>
            * {font-family: Helvetica, Verdana, Arial; font-size:0.95em}
            .eventNotifier{width: 100px; float: left; color:navy; 
                  border: dotted 1px navy; padding: 4px; background-color:white; 
                  margin:3px}
            .dirty{border: solid 1px #0ca2ff; color:white; 
                   background-color:#0ca2ff}
        </style>
    
        <script src="jquery-1.3.2.min.js"></script>
        <script src="jquery.hotkeys-0.7.9.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
    

    //很奇怪 - 我发现警报Ctrl + S出现两次.. ??? $(window).keypress(function(event){   if((event.which == 115&amp;&amp; event.ctrlKey)){       警报(“按住Ctrl + S”);       event.preventDefault();   } });

                jQuery(document).bind('keydown', 'Ctrl+s',
                       function(evt){ Create(); return false; });
                //jQuery(document).bind('keydown', 'Ctrl+s',
                      //function (evt){jQuery('#_Ctrl_s'); return false; });
            });
    
            function Create()
            {
                var f = document.frm
    
                if (f.txtQuestion.value.length == 0)
                {
                    alert('Please enter Question.')
                    f.txtQuestion.focus()
                    return false
                }
                f.submit()
            }
    
        </script>
    </head>
    <body> 
        <form name="frm" method=post action="" >
          <div id="_Ctrl_s" class="eventNotifier">Ctrl+s</div>
          <input type=text name="txtQuestion" maxlength="255" 
                    class="field400" value="">
          <input type=button value="Save" name="BtnSave" onclick="Create()" 
                    class=text100>
        </form>
    </body>
    </html>
    

    代码

2 个答案:

答案 0 :(得分:3)

为避免显示浏览器“另存为”对话框,您必须阻止默认事件操作,例如普通jQuery:

$(window).keypress(function(event) {
  if ((event.which == 115 && event.ctrlKey)){
      alert("Ctrl+S pressed");
      event.preventDefault();
  }
});

答案 1 :(得分:2)

您的代码段没问题但是为了防止默认浏览器操作(如显示“保存”对话框),您必须捕获 KeyPress 事件(而不是KeyDown),当然返回false

jQuery(document).bind('keypress', 'Ctrl+S',function (evt){ 
 //do job..
 return false
});