Не удается заставить окно подтверждения работать, из-за этого выдает ошибки в моем коде

У меня небольшая проблема с моим подтверждением.

Что произошло до того, как я включил окно подтверждения в свой код, так это то, что когда я нажимаю кнопку (имя = preQuestion), если есть какие-либо ошибки проверки, они будут отображаться на странице и не отправлять форму, если проверки нет ошибки, то он отправит форму.

Но то, что я хочу сделать сейчас, что я не могу заставить работать и которое продолжает выдавать мне ошибки, заключается в том, что если есть ошибки проверки, то он будет делать то, что делает в данный момент, но если ошибок проверки нет, тогда я хочу появится окно подтверждения с указанием ... и пользователь нажмет «ОК» или «Отмена». Если пользователь нажимает «ОК», затем отправляет форму, если пользователь нажимает «Отмена», затем закрывает окно подтверждения и остается на той же странице. Где я ошибаюсь?

Ниже приведен код javascript (я сократил код, поэтому он не включает весь код проверки, иначе это будет переполнение кода):

function validation() {

                var isDataValid = true;

                var sessionNoO = document.getElementById("sessionNo");               
                var questionNumberO = document.getElementById("txtQuestion");
                var roomTextO = document.getElementById("room");

                var errSessionMsgO = document.getElementById("sessionNoAlert");
                var errQuesMsgO = document.getElementById("numberAlert");
                var errRoomMsgO = document.getElementById("roomAlert");

                var trimmedRoomText = roomTextO.value.replace(/^\s+/, '').replace(/\s+$/, '');



   if (sessionNoO.value == ""){
          errSessionMsgO.innerHTML = "Please Enter in the Number of Sessions you Require";
          isDataValid = false;   
    }else if (sessionNoO.value == 0){
        errSessionMsgO.innerHTML = "Number of Sessions Must be More than 0";
          isDataValid = false;
      }else{
                errSessionMsgO.innerHTML = ""; 
            }


    if(questionNumberO.value == 0){
        errQuesMsgO.innerHTML = "Please Set the Number of Questions";
        isDataValid = false;
    } else {
        errQuesMsgO.innerHTML = "";
    } 

          if (roomTextO.value == ""){
          errRoomMsgO.innerHTML = "Please Enter in a Room Number";
          isDataValid = false;
            }else if (!trimmedRoomText.length){
          errRoomMsgO.innerHTML = "Please Enter in a Room Number"; 
          isDataValid = false;      
        }else{
                errRoomMsgO.innerHTML = ""; 
            }

            return isDataValid;

            }

            function submitform()
            {

        var sessionFormO = document.getElementById("sessionForm");

        sessionFormO.submit();

            }

            document.getElementsByName("prequestion")[0].addEventListener('click', myClickHandler);

                function myClickHandler(){
     if(validation()){

         function showConfirm(){

         var confirmMsg=confirm("Make sure that your details are correct, once you proceed after this stage you would 
         not be able to go back and change any details towards your Session.Are you sure you want to Proceed?");

         if (confirmMsg==true)
         {
         submitform();   
         }else{
         parent.close();    
         }

     }
}
} 

Код HTML-формы (не показывает всю форму, чтобы не было переполнения кода):

<form action="QandATable.php" method="post" id="sessionForm">
          <p><strong>2: Number of Sessions you Require:</strong> <input type="text" id="sessionNo" onkeypress="return isNumberKey(event)"><br/><span id="sessionNoAlert"></span></p>
            <p><strong>8: Room:</strong> <input type="text" id="room"><br/><span id="roomAlert"></span></p>      <!-- Enter Room here-->
            <table>
            <tr>
            <th>9: Number of Questions:</th>
                <td class="spinner"><input type="text" class="spinnerQuestion" id="txtQuestion" name="textQuestion"></td>
                <td><button class="scrollBtn" id="btnQuestionUp" type="button"><img src="Images/black_uppointing_triangle.png" alt="Increase" /></button>
                <button class="scrollBtn" id="btnQuestionDown" type="button"><img src="Images/black_downpointing_triangle.png" alt="Decrease" /></button></td>
                </tr>
                </table>
                <div id="numberAlert"></div>
                <p><strong>10: </strong><input class="questionBtn" type="button" value="Prepare Questions" name="prequestion" onClick="myClickHandler()"/></p>      <!-- Prepare Questions here-->

        </form>

person BruceyBandit    schedule 24.11.2011    source источник
comment
Определение метода myClickHandler() не найдено?? почему вы не вызываете непосредственно валидацию() onclick   -  person Rashmi Kant Shrivastwa    schedule 24.11.2011
comment
Поскольку я хочу, чтобы кнопка проверялась, затем показывала окно подтверждения, а затем отправляла форму, поэтому было бы лучше создать функцию, которая извлекает информацию из всех трех функций.   -  person BruceyBandit    schedule 24.11.2011
comment
до того, как я включил функцию showConfirm(), MyClickHandler работал отлично   -  person BruceyBandit    schedule 24.11.2011
comment
Нет проблем, мне понравилась проблема, и я исправил ее, просто проверьте ее сейчас.   -  person Rashmi Kant Shrivastwa    schedule 24.11.2011


Ответы (1)


Я внес исправления в ваш код, и теперь он работает нормально, проверьте его
function validation() {

                var isDataValid = true;

                var sessionNoO = document.getElementById("sessionNo");               
                var questionNumberO = document.getElementById("txtQuestion");
                var roomTextO = document.getElementById("room");

                var errSessionMsgO = document.getElementById("sessionNoAlert");
                var errQuesMsgO = document.getElementById("numberAlert");
                var errRoomMsgO = document.getElementById("roomAlert");

                var trimmedRoomText = roomTextO.value.replace(/^\s+/, '').replace(/\s+$/, '');



   if (sessionNoO.value == ""){
          errSessionMsgO.innerHTML = "Please Enter in the Number of Sessions you Require";
          isDataValid = false;   
    }else if (sessionNoO.value == 0){
        errSessionMsgO.innerHTML = "Number of Sessions Must be More than 0";
          isDataValid = false;
      }else{
                errSessionMsgO.innerHTML = ""; 
            }


    if(questionNumberO.value == 0){
        errQuesMsgO.innerHTML = "Please Set the Number of Questions";
        isDataValid = false;
    } else {
        errQuesMsgO.innerHTML = "";
    } 

          if (roomTextO.value == ""){
          errRoomMsgO.innerHTML = "Please Enter in a Room Number";
          isDataValid = false;
            }else if (!trimmedRoomText.length){
          errRoomMsgO.innerHTML = "Please Enter in a Room Number"; 
          isDataValid = false;      
        }else{
                errRoomMsgO.innerHTML = ""; 
            }

            return isDataValid;

            }

            function submitform()
            {

        var sessionFormO = document.getElementById("sessionForm");

        sessionFormO.submit();

            }

            document.getElementsByName("prequestion")[0].addEventListener('click', myClickHandler);

    // problem was here             
function myClickHandler()
{
     if(validation())
{
showConfirm();


     }
}


 function showConfirm(){

         var confirmMsg=confirm("Make sure that your details are correct, once you proceed after this stage you would not be able to go back and change any details towards your Session.Are you sure you want to Proceed? ");

         if (confirmMsg==true)
         {
         submitform();   
         }else{
         parent.close();    
         }
}
person Rashmi Kant Shrivastwa    schedule 24.11.2011
comment
это сработало отлично. Могу ли я задать один маленький вопрос, когда я нажимаю «ОК» или «Отмена», он закрывает окно подтверждения, а затем снова открывает его с тем же вопросом. Если я нажимаю «ОК» или «Отмена» во второй раз, он закрывает окно подтверждения, почему это так? - person BruceyBandit; 24.11.2011