这个小小的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是否允许表单动作=“〜”......?
答案 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;
}