【问题标题】:"DataTable is not a function" $-issue/-conflict (jQuery and new theme)“DataTable 不是函数”$-issue/-conflict(jQuery 和新主题)
【发布时间】:2014-12-18 11:44:30
【问题描述】:

自从更换新主题后,我遇到了一些问题,包括 DataTables。 jQuery 只被调用一次,它被放置在正确的位置,所以基本上一切都正确。

我收到类似

的消息
    TypeError: $(...).DataTable is not a function

    TypeError: $ is undefined

DataTables 下,我有一个带有 load() 的不同 JS,并且有类似的问题。我可以在放这个的时候修复它:

    jQuery(document).ready(function($){

在此之前:

    $("#tmp").load("tmp.htm")

我在一些板上读到,占位符 $ 可能存在问题。无论如何,上面的部分解决了我的问题。但回到数据表。我认为这是同一个问题,但我无法理解问题。

我的表开始于:

    $(document).ready(function() {              
    var tabelle = $('#mytable').DataTable( 

但是之前有这个..

    jQuery(document).ready(function($){ 

我只会得到错误。有人可以帮帮我吗?

++++++++更新++++++++

<script type="text/javascript" language="javascript" class="init">

$.fn.dataTable.pipeline = function ( opts ) {
    // Configuration options
    var conf = $.extend( {
        pages: 5,     // number of pages to cache
        url: '',      // script url
        data: null,   // function or object with parameters to send to the server
                      // matching how `ajax.data` works in DataTables
        method: 'GET' // Ajax HTTP method
    }, opts );

    // Private variables for storing the cache
    var cacheLower = -1;
    var cacheUpper = null;
    var cacheLastRequest = null;
    var cacheLastJson = null;

    return function ( request, drawCallback, settings ) {
        var ajax          = false;
        var requestStart  = request.start;
        var requestLength = request.length;
        var requestEnd    = requestStart + requestLength;

        if ( settings.clearCache ) {
            // API requested that the cache be cleared
            ajax = true;
            settings.clearCache = false;
        }
        else if ( cacheLower < 0 || requestStart < cacheLower || requestEnd > cacheUpper ) {
            // outside cached data - need to make a request
            ajax = true;
        }
        else if ( JSON.stringify( request.order )   !== JSON.stringify( cacheLastRequest.order ) ||
                  JSON.stringify( request.columns ) !== JSON.stringify( cacheLastRequest.columns ) ||
                  JSON.stringify( request.search )  !== JSON.stringify( cacheLastRequest.search )
        ) {
            // properties changed (ordering, columns, searching)
            ajax = true;
        }

        // Store the request for checking next time around
        cacheLastRequest = $.extend( true, {}, request );

        if ( ajax ) {
            // Need data from the server
            if ( requestStart < cacheLower ) {
                requestStart = requestStart - (requestLength*(conf.pages-1));

                if ( requestStart < 0 ) {
                    requestStart = 0;
                }
            }

            cacheLower = requestStart;
            cacheUpper = requestStart + (requestLength * conf.pages);

            request.start = requestStart;
            request.length = requestLength*conf.pages;

            // Provide the same `data` options as DataTables.
            if ( $.isFunction ( conf.data ) ) {
                // As a function it is executed with the data object as an arg
                // for manipulation. If an object is returned, it is used as the
                // data object to submit
                var d = conf.data( request );
                if ( d ) {
                    $.extend( request, d );
                }
            }
            else if ( $.isPlainObject( conf.data ) ) {
                // As an object, the data given extends the default
                $.extend( request, conf.data );
            }

            settings.jqXHR = $.ajax( {
                "type":     conf.method,
                "url":      conf.url,
                "data":     request,
                "dataType": "json",
                "cache":    false,
                "success":  function ( json ) {
                    cacheLastJson = $.extend(true, {}, json);

                    if ( cacheLower != requestStart ) {
                        json.data.splice( 0, requestStart-cacheLower );
                    }
                    json.data.splice( requestLength, json.data.length );

                    drawCallback( json );
                }
            } );
        }
        else {
            json = $.extend( true, {}, cacheLastJson );
            json.draw = request.draw; // Update the echo for each response
            json.data.splice( 0, requestStart-cacheLower );
            json.data.splice( requestLength, json.data.length );

            drawCallback(json);
        }
    }
};


$.fn.dataTable.Api.register( 'clearPipeline()', function () {
    return this.iterator( 'table', function ( settings ) {
        settings.clearCache = true;
    } );
} );

        $(document).ready(function() {

                var tabelle = $('#mytable').DataTable( 
                {
                "processing": true,
                "serverSide": true, 
                "ajax": $.fn.dataTable.pipeline( 
                            {
                            url: 'source.htm',
                            pages: 1
                            } 
                        ),              
                .....
                } 
            );              

        } );
    </script>

【问题讨论】:

  • 您陈述的错误暗示 jQuery ($) 或 DataTables ($.DataTable) 未正确加载,或以错误的顺序访问。能否请您添加完整的初始化代码和包含这些脚本的 HTML。
  • 能否查看jquery库下是否包含datatable库。
  • @RoryMcCrossan 我更新了我的帖子。
  • @Hoja.M.A 正如我在介绍中所说,排序是正确的。

标签: javascript jquery function load datatables


【解决方案1】:

我遇到了同样的问题,下面的代码解决了这个问题

jQuery(document).ready(function($){

【讨论】:

    【解决方案2】:

    这解决了问题。在启动 body-tag 下方添加一行:

    <script> $ = jQuery; </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2016-10-07
      • 1970-01-01
      • 2019-12-19
      • 2016-04-09
      相关资源
      最近更新 更多