jQuery 验证 - 无法调用未定义的方法“调用”


jQuery Validation - Cannot call method 'call' of undefined

不知道为什么这不起作用。我相信你们都知道我在这里想要实现的目标。

当脚本运行时,我得到了一个关于jquery.validate.js line:366 Uncaught TypeError: undefined is not a function,它指的是这一大堆代码:

function delegate( event ) {
            var validator = $.data( this[ 0 ].form, "validator" ),
                eventType = "on" + event.type.replace( /^validate/, "" ),
                settings = validator.settings;
            if ( settings[ eventType ] && !this.is( settings.ignore ) ) {
                settings[ eventType ].call( validator, this[ 0 ], event );
            }
        }                           ^^^^ HERE

我正在使用 codeigniter2 框架,所以如果我的表单页面对某些人来说没有意义,请道歉。

new_page.php(相关位)

<?php echo form_open(site_url('admin/manage_pages/new_page'),
                            array('id' => 'new-page-form')) . PHP_EOL; ?>
    <div class="form-group">
        <?php echo form_label('Page Title', 'page-title',
                                'class="control-label"') . PHP_EOL; ?>
        <?php echo form_input(array(
                                'name' => 'page-title',
                                'id' => 'input-page-title',
                                'max-length' => '255',
                                'placeholder' => 'Enter Page Title',
                                'class' => 'form-control')) . PHP_EOL; ?>
    </div><!-- /.form-group -->
    <div class="form-group">
        <?php echo form_label('Url', 'slug', 'class="control-label"'); ?>
        <span id="input-slug-span" class="form-control">
            <span id="input-slug-static"><?php echo site_url(); ?></span>
            <?php echo form_input(array(
                                    'name' => 'slug',
                                    'id' => 'input-slug')); ?>
        </span>
    </div><!-- /.form-group -->

并在new_page.验证中.js

$(document).ready(function() {
    //--------------------------------------------------------------------------------------
    //
    //  New Page Client Side Validation
    //
    //--------------------------------------------------------------------------------------
    $('#new-page-form').validate({
        onkeyup:true,
        rules: {
            'page-title': {
                required: true,
                remote: { 
                    url: 'new_title_exists',
                    type: 'post',
                    data: {
                        'page-title': function() { return $("#input-page-title").val(); }
                    }
                }
            },
            'slug': {
                required: true,
                remote: {
                    url: 'new_slug_exists',
                    type: 'post',
                    data: {
                        'slug': function() { return $('#input-slug').val(); }
                    }
                }
            }
        },
        messages: {
            'page-title': {
                required: 'Page Title is required.',
                remote: 'Page Title must be unique.'
            },
            'slug': {
                required: 'A URL slug is required',
                remote: 'The URL must be unique.'
            }
        }
    })
})

任何帮助将不胜感激!干杯伙计们

$('#new-page-form').validate({
    // onkeyup:true, // REMOVE THIS
    rules: {
        'page-title': {
            required: true,
            remote: {  // element's value IS always sent
                url: 'new_title_exists',
                type: 'post',
                data: {  // MUST send the CSRF Token Value
                    'csrftoken': function() {
                        return $('input[name="csrftoken"]').val();
                    }
                }
            }
        },
        ....
  • onkeyup: true可能会破坏插件的正常运行。根据文档,"布尔值 true 不是有效值"。那是因为onkeyup能力已经是默认的。

  • 每当在CodeIgniter项目中使用jQuery Validate remote方法或任何ajax()时,您还必须在data内发送CSRF令牌,否则将收到500服务器错误。您可以从表单上的隐藏输入元素中获取此信息。但是,您不需要发送正在评估的输入元素的值,因为默认情况下已发送该数据。 更改上面的name以匹配表单呈现的源代码中显示的内容。