Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 parsley.js-阻止isValid触发事件/只需检查true或false_Javascript_Jquery_Ajax_Parsley.js - Fatal编程技术网

Javascript parsley.js-阻止isValid触发事件/只需检查true或false

Javascript parsley.js-阻止isValid触发事件/只需检查true或false,javascript,jquery,ajax,parsley.js,Javascript,Jquery,Ajax,Parsley.js,您好,我已经不知所措了,我一直在创建一个比我提供的示例更复杂的表单版本 我有一个JS对象,它是表单的表示形式。我在表单本身上使用了欧芹的“isValid”(checkAll和checkGroup函数)。这些方法在每个标有dataparsleyrequired属性的输入上激发。原因是我需要知道整个表单及其各个部分的状态,以便启用/禁用步骤按钮 一切正常,但我还需要在所有验证都成功后调用外部API,请参见第35行。方法checkAll和checkGroup基本上是再次触发事件,从而进行更多的AJAX

您好,我已经不知所措了,我一直在创建一个比我提供的示例更复杂的表单版本

我有一个JS对象,它是表单的表示形式。我在表单本身上使用了欧芹的“isValid”(
checkAll
checkGroup
函数)。这些方法在每个标有
dataparsleyrequired
属性的输入上激发。原因是我需要知道整个表单及其各个部分的状态,以便启用/禁用步骤按钮

一切正常,但我还需要在所有验证都成功后调用外部API,请参见第35行。方法
checkAll
checkGroup
基本上是再次触发事件,从而进行更多的AJAX调用(我们对API的调用有限制)。是否有办法强制方法
isValid
只检查字段是否已验证,并从中获取真/假值

整个过程都是经过编码的,并且依赖于这个结构,所以最好的方法就是拥有类似的功能。我没有经验,所以我犯了很多错误。我的示例是我实际表单的简化版本,但当您打开控制台窗口时,您可以看到我的意思。取消注释第32行和第33行以查看差异,您将了解我的意思

HTML:


您似乎在“输入”上进行验证,这可能非常贪婪,并且还会触发意外的附加验证。为什么不在单击submit时触发验证,并且只允许它在通过时继续?我几乎总是这样处理验证。客户需要某种方式。表单非常大,而且是多步骤的,因此它允许您在表单之间移动。我没有所有的信息。但是我需要以某种方式设置JS对象,但我不想触发验证,只是基本上得到验证的结果。不知何故,我认为
parsley.validate()
执行验证,而
parsley.isValid()
只得到true/false而不执行验证。我弄错了吗?
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Document</title>
</head>
<body>
<form action="" id="myform">
  <div id="section1">
  <input type="text" id="field1" data-parsley-required data-parsley-trigger="input" data-parsley-group="group1" data-parsley-lengthvalidator data-parsley-remote="http://pokeapi.co/api/v2/pokemon/1" data-parsley-remote-validator="remotevalidator" /><br />
  <button id="next" disabled>Next</button><br />
  </div>
  <div id="section2">
  <input type="text" id="field2" data-parsley-required data-parsley-trigger="input" data-parsley-group="group2" />
  </div>
  <input type="submit" id="submit-button" disabled />
</form>
</body>
</html>
function Form(form) {
  this.form = form;
  this.validations = {};
  this.formValid = false;
  this.checkAll = function() {
    var result = $(form).parsley().isValid();
    if (result) {
      $('#submit-button').removeAttr('disabled');
      console.log('form validated');
    } else {
      $('#submit-button').attr('disabled', true);
    }
   this.formValid = result;
  };
  this.checkGroup = function(e) {
    var group = $(e.target).attr('data-parsley-group');
    var result = $(form).parsley().isValid({group: group});
    if (result) {
      $('#next').removeAttr('disabled');
      console.log('group validated');
    } else {
      $('#next').attr('disabled', true);
    }
    this.validations[group] = result;
  };
 this.initialize = function() {
   var self = this;

   $(this.form).parsley();
   $('*[data-parsley-required]').on('input', function(e) {
     self.checkAll();
    self.checkGroup(e);
   });

   $('#field1').parsley().on('field:success', function() {
       console.log('calling another API')
   })

   Parsley.addValidator('lengthvalidator', {
      validateString: function(value) {
        console.log('local validator');
        return value.length > 0;
      }
   });
   Parsley.addAsyncValidator('remotevalidator', function(response) {
      console.log('remote validator');
      return response.responseJSON.name === 'bulbasaur';

     })
   }
  }

 var form = new Form('#myform');
 form.initialize();