简体   繁体   中英

Uncaught ReferenceError: jQuery is not defined

i am getting an error in console as Uncaught ReferenceError: jQuery is not defined(anonymous function) . below is my code

yii = (function ($) {
var pub = {
    /**
     * List of JS or CSS URLs that can be loaded multiple times via AJAX requests. Each script can be represented
     * as either an absolute URL or a relative one.
     */
    reloadableScripts: [],
    /**
     * The selector for clickable elements that need to support confirmation and form submission.
     */
    clickableSelector: 'a, button, input[type="submit"], input[type="button"], input[type="reset"], input[type="image"]',
    /**
     * The selector for changeable elements that need to support confirmation and form submission.
     */
    changeableSelector: 'select, input, textarea',

    /**
     * @return string|undefined the CSRF parameter name. Undefined is returned if CSRF validation is not enabled.
     */
    getCsrfParam: function () {
        return $('meta[name=csrf-param]').attr('content');
    },

    /**
     * @return string|undefined the CSRF token. Undefined is returned if CSRF validation is not enabled.
     */
    getCsrfToken: function () {
        return $('meta[name=csrf-token]').attr('content');
    },

    /**
     * Sets the CSRF token in the meta elements.
     * This method is provided so that you can update the CSRF token with the latest one you obtain from the server.
     * @param name the CSRF token name
     * @param value the CSRF token value
     */
    setCsrfToken: function (name, value) {
        $('meta[name=csrf-param]').attr('content', name);
        $('meta[name=csrf-token]').attr('content', value)
    },

    /**
     * Updates all form CSRF input fields with the latest CSRF token.
     * This method is provided to avoid cached forms containing outdated CSRF tokens.
     */
    refreshCsrfToken: function () {
        var token = pub.getCsrfToken();
        if (token) {
            $('form input[name="' + pub.getCsrfParam() + '"]').val(token);
        }
    },

    /**
     * Displays a confirmation dialog.
     * The default implementation simply displays a js confirmation dialog.
     * You may override this by setting `yii.confirm`.
     * @param message the confirmation message.
     * @param ok a callback to be called when the user confirms the message
     * @param cancel a callback to be called when the user cancels the confirmation
     */
    confirm: function (message, ok, cancel) {
        if (confirm(message)) {
            !ok || ok();
        } else {
            !cancel || cancel();
        }
    },

    /**
     * Handles the action triggered by user.
     * This method recognizes the `data-method` attribute of the element. If the attribute exists,
     * the method will submit the form containing this element. If there is no containing form, a form
     * will be created and submitted using the method given by this attribute value (e.g. "post", "put").
     * For hyperlinks, the form action will take the value of the "href" attribute of the link.
     * For other elements, either the containing form action or the current page URL will be used
     * as the form action URL.
     *
     * If the `data-method` attribute is not defined, the `href` attribute (if any) of the element
     * will be assigned to `window.location`.
     *
     * Starting from version 2.0.3, the `data-params` attribute is also recognized when you specify
     * `data-method`. The value of `data-params` should be a JSON representation of the data (name-value pairs)
     * that should be submitted as hidden inputs. For example, you may use the following code to generate
     * such a link:
     *
     * ```php
     * use yii\helpers\Html;
     * use yii\helpers\Json;
     *
     * echo Html::a('submit', ['site/foobar'], [
     *     'data' => [
     *         'method' => 'post',
     *         'params' => [
     *             'name1' => 'value1',
     *             'name2' => 'value2',
     *         ],
     *     ],
     * ];
     * ```
     *
     * @param $e the jQuery representation of the element
     */
    handleAction: function ($e) {
        var method = $e.data('method'),
            $form = $e.closest('form'),
            action = $e.attr('href'),
            params = $e.data('params');

        if (method === undefined) {
            if (action && action != '#') {
                window.location = action;
            } else if ($e.is(':submit') && $form.length) {
                $form.trigger('submit');
            }
            return;
        }

        var newForm = !$form.length;
        if (newForm) {
            if (!action || !action.match(/(^\/|:\/\/)/)) {
                action = window.location.href;
            }
            $form = $('<form method="' + method + '"></form>');
            $form.attr('action', action);
            var target = $e.attr('target');
            if (target) {
                $form.attr('target', target);
            }
            if (!method.match(/(get|post)/i)) {
                $form.append('<input name="_method" value="' + method + '" type="hidden">');
                method = 'POST';
            }
            if (!method.match(/(get|head|options)/i)) {
                var csrfParam = pub.getCsrfParam();
                if (csrfParam) {
                    $form.append('<input name="' + csrfParam + '" value="' + pub.getCsrfToken() + '" type="hidden">');
                }
            }
            $form.hide().appendTo('body');
        }

        var activeFormData = $form.data('yiiActiveForm');
        if (activeFormData) {
            // remember who triggers the form submission. This is used by yii.activeForm.js
            activeFormData.submitObject = $e;
        }

        // temporarily add hidden inputs according to data-params
        if (params && $.isPlainObject(params)) {
            $.each(params, function (idx, obj) {
                $form.append('<input name="' + idx + '" value="' + obj + '" type="hidden">');
            });
        }

        var oldMethod = $form.attr('method');
        $form.attr('method', method);
        var oldAction = null;
        if (action && action != '#') {
            oldAction = $form.attr('action');
            $form.attr('action', action);
        }

        $form.trigger('submit');

        if (oldAction != null) {
            $form.attr('action', oldAction);
        }
        $form.attr('method', oldMethod);

        // remove the temporarily added hidden inputs
        if (params && $.isPlainObject(params)) {
            $.each(params, function (idx, obj) {
                $('input[name="' + idx + '"]', $form).remove();
            });
        }

        if (newForm) {
            $form.remove();
        }
    },

    getQueryParams: function (url) {
        var pos = url.indexOf('?');
        if (pos < 0) {
            return {};
        }
        var qs = url.substring(pos + 1).split('&');
        for (var i = 0, result = {}; i < qs.length; i++) {
            qs[i] = qs[i].split('=');
            result[decodeURIComponent(qs[i][0])] = decodeURIComponent(qs[i][1]);
        }
        return result;
    },

    initModule: function (module) {
        if (module.isActive === undefined || module.isActive) {
            if ($.isFunction(module.init)) {
                module.init();
            }
            $.each(module, function () {
                if ($.isPlainObject(this)) {
                    pub.initModule(this);
                }
            });
        }
    },

    init: function () {
        initCsrfHandler();
        initRedirectHandler();
        initScriptFilter();
        initDataMethods();
    }
};

function initRedirectHandler() {
    // handle AJAX redirection
    $(document).ajaxComplete(function (event, xhr, settings) {
        var url = xhr.getResponseHeader('X-Redirect');
        if (url) {
            window.location = url;
        }
    });
}

function initCsrfHandler() {
    // automatically send CSRF token for all AJAX requests
    $.ajaxPrefilter(function (options, originalOptions, xhr) {
        if (!options.crossDomain && pub.getCsrfParam()) {
            xhr.setRequestHeader('X-CSRF-Token', pub.getCsrfToken());
        }
    });
    pub.refreshCsrfToken();
}

function initDataMethods() {
    var handler = function (event) {
        var $this = $(this),
            method = $this.data('method'),
            message = $this.data('confirm');

        if (method === undefined && message === undefined) {
            return true;
        }

        if (message !== undefined) {
            pub.confirm(message, function () {
                pub.handleAction($this);
            });
        } else {
            pub.handleAction($this);
        }
        event.stopImmediatePropagation();
        return false;
    };

    // handle data-confirm and data-method for clickable and changeable elements
    $(document).on('click.yii', pub.clickableSelector, handler)
        .on('change.yii', pub.changeableSelector, handler);
}

function initScriptFilter() {
    var hostInfo = location.protocol + '//' + location.host;
    var loadedScripts = $('script[src]').map(function () {
        return this.src.charAt(0) === '/' ? hostInfo + this.src : this.src;
    }).toArray();

    $.ajaxPrefilter('script', function (options, originalOptions, xhr) {
        if (options.dataType == 'jsonp') {
            return;
        }
        var url = options.url.charAt(0) === '/' ? hostInfo + options.url : options.url;
        if ($.inArray(url, loadedScripts) === -1) {
            loadedScripts.push(url);
        } else {
            var found = $.inArray(url, $.map(pub.reloadableScripts, function (script) {
                return script.charAt(0) === '/' ? hostInfo + script : script;
            })) !== -1;
            if (!found) {
                xhr.abort();
            }
        }
    });

    $(document).ajaxComplete(function (event, xhr, settings) {
        var styleSheets = [];
        $('link[rel=stylesheet]').each(function () {
            if ($.inArray(this.href, pub.reloadableScripts) !== -1) {
                return;
            }
            if ($.inArray(this.href, styleSheets) == -1) {
                styleSheets.push(this.href)
            } else {
                $(this).remove();
            }
        })
    });
}

return pub;
})(jQuery);

jQuery(document).ready(function () {
    yii.initModule(yii);
});

what is the problem? am i missing something. i am not very good in javascript. this js file yii.activeForm.js is in web/assets/b807742 because of this error modal is not working

You need to insert:

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>

As the first script on your page. This is the jQuery library that you need to get this to work. It is one of the dependencies.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM