为什么这个JavaScript代码不能按预期工作?

时间:2011-10-13 14:19:49

标签: javascript

这个小小的JavaScript以及一些CSS应该可以通过在点击提交后冻结屏幕来防止重复进入数据库。

到目前为止,已有超过200人使用该应用程序提交参赛作品,其中6人已设法提交重复参赛作品。

我们怀疑旧浏览器可能会对双重条目负责。

我们仍在调查。

这个假设是否正确?

如果是,是否有办法改进此代码以适用于所有浏览器?

我想保留这些代码,而不是为了另一种代码,因为它具有令人愉悦的外观和感觉,但是可以更好地开启。

<script type="text/JavaScript">
    function FreezeScreen(msg) {
        scroll(0, 0);
        var outerPane = document.getElementById('FreezePane');
        var innerPane = document.getElementById('InnerFreezePane');
        if (outerPane) outerPane.className = 'FreezePaneOn';
        if (innerPane) innerPane.innerHTML = msg;
    }
</script>

- CSS

<style type="text/css">
   .FreezePaneOff
   {
      visibility: hidden;
      display: none;
      position: absolute;
      top: -100px;
      left: -100px;
   }

   .FreezePaneOn
   {
      position: absolute;
      top: 0px;
      left: 0px;
      visibility: visible;
      display: block;
      width: 100%;
      height: 100%;
      background-color: #666;
      z-index: 999;
      filter:alpha(opacity=85);
      -moz-opacity:0.85;
      padding-top: 20%;
   }

   .InnerFreezePane
   {
      text-align: center;
      width: 66%;
      background-color: #171;
      color: White;
      font-size: large;
      border: dashed 2px #111;
      padding: 9px;
   }
</style>

****** ****** UPDATE

我在这里发布我的回复,因为那件事不允许我用愚蠢的消息添加评论,即每5秒只允许1条评论,并且自上次评论添加以来已经过了10分钟。

非常感谢@PPvG和@Random。我需要你们其中一个人的剧本(更有可能是@ Random的,因为我不明白@PPvG对你提交的东西是什么意思......)但我是否需要使用你们中的一个人的js in除了我目前正在使用的那个?另外,asp.net是否允许表单动作=“〜”......?

2 个答案:

答案 0 :(得分:2)

这些都不会实际阻止页面提交。为什么不拦截页面的on_submit操作并在页面已经提交时取消?

<form action="~" onSubmit="return CheckSubmitted();">
    .......
</form>

<script type="text/javascript">
var submitted = false;

function CheckSubmitted()
{
    if (submitted == true) { return false; }
    else { submitted = true; return true; }
}
</script>

答案 1 :(得分:0)

我同意@Random。只需禁用提交按钮,并在提交一次后阻止表单的默认操作。像这样:

var submitted = false;
var form = document.getElementById('form_id');
var submitButton = document.getElementById('submit_button_id');

form.onsubmit = function() {
    if (submitted) {
        FreezeScreen("Already submitted!");
        // Stop the form from being submitted a second time:
        return false;
    }

    // ... do your submitting stuff ...

    submitted = true;
    submitButton.disabled = true;
}