提问者:小点点

如何在循环中验证文本区域和单选按钮


我需要一个人帮忙。我有一些多文本区,单选按钮和下拉列表,是通过点击按钮创建的。我需要使用JavaScript/jQuery验证textarea是否有空值、单选按钮检查和下拉选择。我在下面解释我的代码。

<div style="width:24%; float:left; padding:10px;">No of questions : 
<input name="no_of_question" id="ques" class="form-control" placeholder="no of question" value="<?php if($_REQUEST['edit']) { echo $getcustomerobj->no_of_question; } else { echo $_REQUEST['no_of_question']; } ?>" type="text" onkeypress="return isNumberKey(event)">
</div>
<div style="padding-bottom:10px;">
Questions : <input type="button" class="btn btn-success btn-sm" name="plus" id="plus" value="+" onClick="addQuestionField();"><input type="button" class="btn btn-danger btn-sm" name="minus" id="minus" value="-" onClick="deleteQuestionField();">
</div>

<script>
function addQuestionField(){
    var get =$("#ques").val();
    if(get==null || get==''){
        alert('Please add no of questions');
    }else{
        var counter = 0;
        if (counter > 0){
            return;
        }else{
             counter++;
              <?php
                   $status=array("status"=>'1');
                   $feeddata=$db->kf_answertype->find($ustatus); 
            ?>
            <?php
                 $status=array("status"=>'1');
                $feeddatascale=$db->kf_scale->find($ustatus);
            ?>
             for(var i=1;i<get;i++){

                  $('#container').append('<div><div style="width:24%; float:left; padding:10px;"> <textarea class="form-control" name="questions'+ i +'" id="questions'+ i +'" placeholder="Questions"  style="background:#FFFFFF;"  rows="2"><?php if($_REQUEST['edit']) { echo $getcustomerobj->questions; } else { echo $_REQUEST['questions']; } ?></textarea></div><div style="float:left;margin-top:37px;"><div style="float:left; margin-right:10px;"><?php foreach($feeddata as $v){?> <input type="radio" name="answer_type'+i+'" id="answer_type0" onClick="selectScale(this.value,'+i+');" value="<?php echo $v['_id']; ?>"> <?php echo $v['answertype']; ?> <?php }?></div><div style="float:left; margin-top:-10px;display:none;" id="scaleid'+i+'"><select class="form-control" id="nscale'+i+'" name="noofscale'+i+'"><option value="">Select Answer Type</option><?php foreach($feeddatascale as $v){ ?><option value="<?php echo $v['_id']; ?>" <?php if($getcustomerobj->no_of_scale == $v['_id'] or $_REQUEST['no_of_scale'] == $v['_id']){ print 'selected'; } ?>><?php echo $v['noofscale']; ?></option><?php } ?></select></div><div style="clear:both;"></div></div><div style="clear:both;"></div></div>');

             }

        }
    }
}
</script>

在这里,当用户将点击按钮时,一些多文本区域、单选按钮和下拉列表将动态显示。在这里,我需要在提交表格时检查所有表格是否为空/已检查。请帮帮我。


共2个答案

匿名用户

根据我对这个问题的理解,我推断出您有一个带有输入控件的表单。用户可以按''复制/克隆包含所有输入的div,从而提供一个填充有输入控件的附加表单。如果是这种情况,您可以使用以下内容进行验证,以确保所有当前可见的输入控件都已填充数据。

先决条件:确保所有表单都分配了相同的类名。

示例:

var visibleDivs = $(".DisplayableDiv:visible"); // .DisplayableDiv name of all class containing form controls
var hasValue = true;
// loop over all visible divs
for(i = 0; i < visibleDivs.length; ++i)
{
    $(visibleDivs[i]).find('input')
    .each(function() { // iterates over all input fields found
        if($.trim($(this).val()).length === 0) {
            hasValue = false; // if field found without value
            break;
        }
    });
}

if(hasValue === false) {
    // handle validation logic here (prompt user to complete all input areas etc)
}

匿名用户

您的代码有许多问题,但尤其是您的方法错误。

请注意,在呈现页面并显示DOM之后,PHP已经完成,不再有PHP可以运行。那么如何在PHP中做更多的工作呢?两种选择:

(1) 表单,或
(2)AJAX-非常简单,请参见以下简单示例

Ajax将指定的数据发送到后端PHP文件。请注意,您不能将AJAX数据发布到包含AJAX javascript的同一个文件中。必须使用第二个PHP文件。

后端PHP文件接收数据,使用传入数据(例如,ques的num)在$variable中创建新的HTML,然后将该$variable回显到原始文件,并在中接收。done()函数(也称为success函数),作为变量(例如recvd)。如果您收到HTML代码,那么可以通过之类的方法将该代码注入到DOM中。append()。html()等。

下面是您可能会如何进行的粗略估计。

$('#plus').click(function(){
  addQuestionField();
});
$('#minus').click(function(){
  deleteQuestionField();
});

function addQuestionField(){
  var numques = $("#ques").val();
  if(numques==null || numques==''){
    alert('Please add no of questions');
    return false;
  }
  var myAj = $.ajax({
    type: 'post',
     url: 'ajax.php',
    data: 'numques=' + numques,
  });
  myAj.done(function(recvd){
    $('#container').append(recvd);
  });
}
<style>
  #d1 {width:24%; float:left; padding:10px;}
  #d2 {padding-bottom:10px;}
</style>
<div id="d1" style="">No of questions : 
  <input id="ques" class="form-control" placeholder="no of question" type="text" />
</div>
<div id="d2">
  Questions : 
  <input type="button" class="btn btn-success btn-sm" name="plus" id="plus" value="+">
  <input type="button" class="btn btn-danger btn-sm" name="minus" id="minus" value="-">
</div>