如果没有答案,如何防止提交表单的最后一个问题

Posted

技术标签:

【中文标题】如果没有答案,如何防止提交表单的最后一个问题【英文标题】:How to prevent submit last questionof a form if there is no answer 【发布时间】:2015-07-04 16:20:42 【问题描述】:

我有一份带有问题的调查表。首先,我隐藏所有问题,然后使用“下一步”按钮依次显示。我已经进行了验证,它有效,但仅对于最后一个问题它不起作用。如果有人没有启用 javascript,我还提供了 php 验证。现在,当您没有为最后一个问题选择答案时,它不会提交表单,而是返回到调查的第一个问题,您必须再次选择它们。那是我的问题 - 如何验证最后一个问题?这是我的代码:

$(function () 
    $( document ).ready(hideAllRows);
    $( document ).ready(showFirst);
    $('#button').hide();
);

function hideAllRows()
    $('#questionsTable tr').each(function() 
        $(this).hide();
    );


$(function () 
    $("#next").click(showNextQuestion);
);

var currentInd = 1;
var prevInd = 1;
function showNextQuestion()
    $(function () 
        var indId = "#"+currentInd;
        prevInd = currentInd - 1;
        var prevId = "#"+prevInd;

        //validation
        var isAnyClicked = false;​
        if ($(prevId + " input[type='radio']:checked").val()) 
            isAnyClicked = true;
        

        if(currentInd > 0 && currentInd  != $('#questions_count').val() && isAnyClicked == false) 
            alert('Моля, отговорете!');
        

        else 
            //hide previous question
            $(prevId).hide();

            //show next question 
            var indId = "#"+currentInd;
            $(indId).show();
            currentInd++;
            if(currentInd  == $('#questions_count').val()) 
                $('#button').show();
                $("#next").hide();
            
        
    );


function showFirst()
    $(function () 
        $('#0').each(function() 
            $(this).show();
        );
    );

.

<?php

$att=array('id'=>'form');
echo form_open('index/survey_fill/' .$survey_id .'/'. $question_id , $att); ?>
<input type='hidden' name='questions_count' id='questions_count' value='<?php echo count($question); ?>' />
<table id='questionsTable' >
  <thead>
    <tr><th>Question</th></tr>
  </thead>   
  <tbody>
  <?php
    echo validation_errors();​
 $index = 0;
    foreach ($question as $row)
    
        echo "<tr id='$index'>";
        $index++;
    ?>

        <td> 
        <?php echo "$row->question"; ?><br/>
        <?php echo "<input type='hidden' name='question_id' value='$row->question_id' />"; ?>
        <?php 

        $data=array(
            'name' =>  'answer['.$row->question_id.']',
            'value' => '5',
            'class' => 'answer'

        );

        echo "<input type='hidden' name='survey_id' value='$row->survey_id'>"; 

        echo form_radio($data); 
        echo " 5 ";
        $data=array(
            'name' =>  'answer['.$row->question_id.']',
            'value' => '4',
            'class' => 'answer'
        );
        echo form_radio($data);​
         echo "4";
</td></tr>

    <?php 
    

?>      

</table>
 <?php echo "<input type='hidden' name='question_id' value='$row->question_id' />"; ?>
  <?php  echo '<input type="submit" id="button" name = "submit" value="Submit" class="btn btn-success">';
  ?>
<input type="button" id="next" name = "next" value="Next" class="btn btn-success">
</form>
</div>

</body>​

我试过这个:

$(document).ready(function() 
    var currentInd=1;      
    $('form').on('submit', function(e)
        isAnyClicked = false;

        if (currentInd  = $('#questions_count').val() &&
                ($(currentInd + " input[type='radio']:checked").val())) 
             isAnyClicked = true;
             $(currentInd ).hide();
             alert(" answer selected");
         if (currentInd  = $('#questions_count').val() && isAnyClicked == false)      
            $('tr' + currentInd).css( display: 'block' );

             e.preventDefault();
             alert("select answer");
             currentInd++;
          
    );
);​

它阻止表单提交,但即使我选择了答案,表单也不会提交。如果您选择了答案,如何提出第一个条件,表格提交?它总是运行第二个条件并且表单不提交。谢谢!

【问题讨论】:

【参考方案1】:

您可以使用以下代码阻止提交表单:

$(document).ready(function() 
  $('form').on('submit', function(e)
    // validation code here
    if(!AllFieldsAreValid) 
      e.preventDefault();
    
  );
);

当所有字段填写正确与否时,您可以将 AllFieldsAreValid 定义为 True 或 False。

【讨论】:

表单没有发送,但它再次向我展示了第一个问题。在我的情况下,如何坚持最后一个问题?最后一个问题是 if( currentInd = $('#questions_count').val()) 我无法对其进行验证。 我找不到 foreach ($question as $row) 结束的位置。我认为您可以使用 PHP 和可见的 html 代码编写所有代码。然后使用 Jquery 隐藏/显示不需要的部分。 我编辑了我的问题。即使您选择了最后一个问题的答案,现在表单也不会提交。如果您选择了最后一个问题的答案,如何提交表单? :) 我认为 它也在foreach后面question"; ?> .现在的问题是,即使您选择答案,它也不会提交表单。我认为这个 if 不运行: if( currentInd = $('#questions_count').val() && ($(currentInd + " input[type='radio']:checked").val())) isAnyClicked =真; $(currentInd).hide();警报(“答案”);

以上是关于如果没有答案,如何防止提交表单的最后一个问题的主要内容,如果未能解决你的问题,请参考以下文章

如何防止HTMLFormElement.submit()调用表单提交[重复]。

如何在表单提交时防止表单在刷新时重新提交

刷新页面时如何防止表单重新提交(F5 / CTRL+R)

如何防止表单重复提交

防止表单提交字段输入键keydown? [复制]

防止在 Ajax 发布后使用 Javascript 重新提交表单(无重定向)