Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的提交按钮在第一次运行所需脚本之前需要单击两次?_Javascript_Email_Onclick - Fatal编程技术网

Javascript 为什么我的提交按钮在第一次运行所需脚本之前需要单击两次?

Javascript 为什么我的提交按钮在第一次运行所需脚本之前需要单击两次?,javascript,email,onclick,Javascript,Email,Onclick,我是java脚本的新手,我使用此脚本在访问者提交电子邮件时弹出此自定义消息。但是,由于某些原因,“显示:阻止”仅在用户第二次单击“提交”后发生,而不是在第一次单击后发生。但是,此后每次(除非重新加载页面),该函数只需单击一次即可工作。我能够使它按预期运行的唯一方法是将onLoad=“eSubmit”添加到hte body标记(基本上代替第一次单击),但我不想这样做。我拥有的所有适用代码如下。。。谢谢你的帮助 <head> <style type="text/css"> .

我是java脚本的新手,我使用此脚本在访问者提交电子邮件时弹出此自定义消息。但是,由于某些原因,“显示:阻止”仅在用户第二次单击“提交”后发生,而不是在第一次单击后发生。但是,此后每次(除非重新加载页面),该函数只需单击一次即可工作。我能够使它按预期运行的唯一方法是将onLoad=“eSubmit”添加到hte body标记(基本上代替第一次单击),但我不想这样做。我拥有的所有适用代码如下。。。谢谢你的帮助

<head>
<style type="text/css">
.alertbox{
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background-color:rgba(0,0,0,.6);
z-index:100;
display:none;
}
</style>

<script type="text/javascript">

function eSubmit() {
    var msgBox = document.getElementById("msgSend");
    var responseTxt = document.getElementById("thanks");

   if(msgBox.style.display == 'block' || msgBox.style.display ==''){
      msgBox.style.display = 'none';}

   else{
      msgBox.style.display = 'block';}

   if(responseTxt.innerHTML == 'Returning to page...'){
        responseTxt.innerHTML = 'Thank you for submitting your e-mail.';}
}

function txtChange(){
    var E = setTimeout("eSubmit()",1000);
    var responseTxt = document.getElementById("thanks");

    if(responseTxt.innerHTML == 'Thank you for submitting your e-mail.'){
        responseTxt.innerHTML = "Returning to page...";
        E;} 
}

</script>
</head>

<body>
<input type="button" value="Send" onclick="eSubmit()">

<div id="msgSend" class="alertbox">
    <div onClick="txtChange()">
        <p id="thanks">Thank you for submitting your e-mail.</P>
    </div>
</div>

</body>

.警报箱{
位置:绝对位置;
排名:0;
左:0;
宽度:100%;
身高:100%;
背景色:rgba(0,0,0,6);
z指数:100;
显示:无;
}
函数eSubmit(){
var msgBox=document.getElementById(“msgSend”);
var responseText=document.getElementById(“谢谢”);
if(msgBox.style.display='block'| | msgBox.style.display==''){
msgBox.style.display='none';}
否则{
msgBox.style.display='block';}
如果(responseText.innerHTML==“返回页面…”){
responseText.innerHTML='感谢您提交电子邮件。;}
}
函数txtChange(){
var E=setTimeout(“eSubmit()”,1000);
var responseText=document.getElementById(“谢谢”);
if(responseText.innerHTML==“感谢您提交电子邮件”。){
responseText.innerHTML=“返回页面…”;
E、 }
}

感谢您提交电子邮件。


只是猜测,但请仔细研究一下

   if(msgBox.style.display == 'block' || msgBox.style.display ==''){
      msgBox.style.display = 'none';}
即使内部有显式设置,display属性也会设置为空字符串。根据W3C的建议,.style属性仅反映元素本身的style=“”-属性内设置的属性,而不是在别处定义的任何计算或继承的设置

因此,if语句变为true,并在第一次单击时将display设置为none


解决方案:更改if-else逻辑或将CSS-display属性初始化为符合您需要的样式属性

显然,您的想法是正确的。当我切换if/else逻辑时,它现在可以完美地工作。然而,我不明白为什么?这是切换部分的新代码:if(msgBox.style.display='none'){msgBox.style.display='block';}else{msgBox.style.display='none';}出于某种原因,它是这样工作的,但不是这样?编辑了我的帖子。您能否使用旧的解决方案发布所述的
警报
?那可能会把事情弄清楚。将警报放在if语句前面OK,简单一点:css不包含显示的初始值。if语句检查空字符串(=''),由于未初始化而找到它,计算为true并跳转到第一个块设置display为none。因此,第一次单击将始终将“显示”设置为“无”。如果你接受答案,你也可以点击大的勾选标记:)但是我的css设置为“显示:无”,这就是我不明白的,它怎么没有初始化?当页面启动时,Div没有显示(这是我想要的),这不意味着我设置正确吗?
**display:none**
是无效的css,因此根本没有css。你应该移除星星,然后再试一次