一个C#.net程序,作了键盘控制。比如数据重复提交,快速按键,F2-F10的功能键控制。
但有一个问题 一直没有办法解决:
一个网页,有一个按钮,Button1,按下F5后,有选择对话框,按下回车后,由可触发 onsubmit件事的javascript提交页面。所有控制在onsubmit事件中处理完成。比如提交完成后,再按F5,不会给响应。现在的问题是这个网页提交时,有个反应时间,可能是零点几秒吧,但就在这零点几秒的时间里,只要手够快,可以按两次F5加N多次回车。这时由于数据正在提交回传过程,页面是空白状态,F5的javascript 的控制无效,如果网页回传回后,又被刚才压在缓冲中的操作再次提交。这不是想要的结果。不知哪位高手碰到过这种问题,寻求一解决方法。

解决方案 »

  1.   

    按回车触发Button1的客户端事件,可以js中马上禁用这个Button!!
    至于按F5可以在js中做个标记,第一次按设为1,处理完恢复为0,
    在这期间再按F5,如为1,则不处理!!
      

  2.   


    方法不错。使用ajax也可以,只发送一次请求
      

  3.   

    各位现在所说的方法,除了Ajax外,都已使用。但还是无法回避问题 。
    Ajax在这地方的使用不现实,这地方代码书写8000行以上,页面数据多如牛毛,结构复杂
      

  4.   

    以下是否可以?
    放一个
    <input id="Hidden1" type="hidden" value="0" />js:
            document.onkeydown = function() {
                var evt = window.event || arguments[0];
                if (document.getElementById("Hidden1").value == "0") {
                    document.getElementById("Hidden1").value = "1";
                    if (evt.keyCode == 116) {
                        //你的处理
                        alert("处理");
                        return false;
                    }
                }
            }
      

  5.   

    试验了一下完全可以,加了几行代码!!<input id="Hidden1" type="hidden" value="0" /> js:
            document.onkeydown = function() {
                var evt = window.event || arguments[0];
                if (document.getElementById("Hidden1").value == "0") {
                    document.getElementById("Hidden1").value = "1";
                    if (evt.keyCode == 116) {
                        //你的处理 
                        alert("处理");
                        evt.keyCode = 0;  
                        evt.cancelBubble = true;  
                        return false;
                    }
                }
            }
      

  6.   

    在第一次之后lock所有功能 刷新好之后再打开