【问题标题】:validationEngine('validate') not a functionvalidationEngine('validate') 不是函数
【发布时间】:2016-09-12 19:36:40
【问题描述】:

我有一个简单的表单,我想知道该表单是否处于有效状态。

这个项目正在使用jQuery Validation Engine

我使用的是同一个版本 2.6.2

根据文档,它支持 validationEngine('validate') 函数,该函数根据表单的状态返回 true 或 false。

我不断收到错误TypeError: $(...).validationEngine is not a function 但奇怪的是,表单会根据需要抛出验证错误。

我确实检查了validationEngine插件是在jquery之后和我触发调用的js文件之前加载的。表单选择器也是正确的。

形式:

  <form name="editProfileForm" method="post" action="#" class="epf" id="editDiaryForm" style="display:none;">

        <a href="javascript:void(0)" onclick="toggleCancel(this,'addPlay');$('#editDiaryForm')[0].reset();;" class="pull-right action-link">Cancel</a> 
        <a href="javascript:void(0)" onclick="submitDiary('#editDiaryForm');" class="pull-right action-link">Save </a>
        <input class="form-control validate[required, ajax[ajaxDiaryCall]]" name="title" id="title" type="text"/>
        <textarea class="form-control validate[required]" name="playdiary" id="playdiary"></textarea>

        <input type="hidden" name="Edit" value="playdiary" />
      </form>

附加验证:

 $(document).ready(function(){
      $("#editDiaryForm").validationEngine('attach'); 
        //This throws true
        console.log($('#editDiaryForm').validationEngine('validate')); 
    });

提交功能

  function submitDiary(formid)
    {
      $(formid).bind('submit' , function(e){
        e.preventDefault();
        // Gives me the expected value
        console.log('Submiting Form - '+ formid);
        //Throws me an error here if commited
        $(formid).validationEngine();
        submit = false;
        //Gets stuck here
        if(submit == false && $(formid).validationEngine('validate') == true)
        {
          submit=true;
          $.ajax({
            url: url+'diary/save',
            async: false,
            type: "post",
            data: $(formid).serialize(),
            success: function (data) {
              if(data==true)
              {
                $('#diaries').prepend(data);
              }
              else
              {
                custom_page_msg('Something Went Wrong. Please Login to your account again to complete the action.');
              }
              submit = false;
            }
          });
        }

      });

      $(formid).submit();
 }

脚本顺序

<script src="<?php echo base_url()?>js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="<?php echo base_url('js'); ?>/bootstrap.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

<script src="<?php echo base_url('js/languages'); ?>/jquery.validationEngine-en.js"></script>
<script src="<?php echo base_url('js'); ?>/jquery.validationEngine.js"></script>
<script src="<?php echo base_url('js'); ?>/jquery.customSelect.min.js"></script> 

<script src="<?php echo base_url('js'); ?>/scripts.js"></script>
<script src="<?php echo base_url('js'); ?>/other-validation.js"></script>
<script src="<?php echo base_url('js'); ?>/dropzone.js"></script>
<script src="<?php echo base_url('js'); ?>/global.js"></script>

这方面的任何指导都会非常有帮助。

更新

它在别处解决了这个问题。我发现一个文件正在加载它自己的 JS 版本。只需在 submitDiary 函数开头的一个简单的jQuery.noConflict(); 就可以了。如果您遇到类似的事情,可能就是这样。

谢谢。

【问题讨论】:

    标签: javascript jquery forms jquery-validation-engine


    【解决方案1】:

    好的,问题是当 jQuery 没有准备好时你试图调用一些函数,最好的乳清有同步。处理只需在您的按钮上绑定点击事件,并在点击时处理您的所有数据。

    下面我有一个简单的例子。

    $(function(){
        $("#editDiaryForm").validationEngine('attach');
        console.log("Here is type of validationEngine: ", typeof $("#editDiaryForm").validationEngine);
      
      $('#test').bind('click', function(e) {
        e.preventDefault();
        $(this).parent('form').validationEngine('validate');
      });
    });
    <html>
    <head>
    
    </head>
    <body>
       <form name="editProfileForm" method="post" action="#" class="epf" id="editDiaryForm">
            <a id="test" href="#" class="pull-right action-link">Save </a>
          </form>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-Validation-Engine/2.6.2/jquery-1.8.2.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-Validation-Engine/2.6.2/languages/jquery.validationEngine-en.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-Validation-Engine/2.6.2/jquery.validationEngine.min.js"></script>
    </body>
    </html>

    【讨论】:

    • @Genocide_Hoax 我编辑的帖子应该可以工作,所以只需更改您调用请求的乳清
    • 我更新了提交功能。请看一看。
    • 不,这不起作用,我告诉你的 onclick="" 将被异步传播。尝试设置一些 ID,然后用 jQuery 绑定一个点击事件,就像在我的示例中一样,让我知道会发生什么
    • 这是问题所在,我不能这样做,因为表单是在循环中创建的,每个表单都有一个与循环计数器相关联的 id。因此,我需要一种借助对象来创建整个操作的方法。我看不出它不应该起作用的理由。除了我尝试用实际的 id 手动替换 formid 之外,同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多