Почему моей кнопке «Отправить» требуется 2 щелчка, прежде чем запускать нужный скрипт в первый раз? - PullRequest
0 голосов
/ 28 января 2012

Я новичок в java-script и сделал этот скрипт всплывающим сообщением, когда посетитель отправляет электронное письмо.Однако по какой-то причине «display: block» происходит только после второго раза, когда пользователь нажимает «Submit», а не после первого щелчка.Тем не менее, каждый последующий раз после этого (если только страница не будет перезагружена) функция работает только с одним щелчком мыши.Единственный способ заставить его работать так, как нужно, - добавить onLoad = "eSubmit" в тег 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>

1 Ответ

1 голос
/ 28 января 2012

Просто угадай, но посмотри на это

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

Свойство display установлено в пустую строку, даже если внутри есть явный параметр. Согласно рекомендации W3C, свойства .style отражают только свойства, установленные внутри style = "" - атрибута самого элемента, а не какие-либо вычисленные или унаследованные параметры, определенные в другом месте.

Из-за этого оператор if становится истинным и при первом нажатии отображает значение none.

Решение: измените свою логику if-else или инициализируйте свойство отображения CSS как атрибут стиля, соответствующий вашим потребностям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...