当我开始我的程序时,我收到此消息:
未捕获的ReferenceError:jQuery未定义
在jquery-ui.min.js:6
在jquery-ui.min.js:6
我不确定我做错了什么,我在index.js中没有使用jQuery或jQuery UI。这是我的HTML文件:
编辑:这是一个Electron.js应用。我已经回答了我自己的问题。
答案 0 :(得分:3)
除非您首先声明主jQuery库,否则jQuery UI不起作用。如果jQuery没有正确加载,jQuery UI将因你得到的错误而失败。
你有两个声明,但第一个似乎要求正确的文件(jquery.js),但是从错误的路径,所以jQuery没有被加载。如果您要打开浏览器的开发者工具(F12)并查看"网络"选项卡,您很可能会看到文件请求返回时出现404错误。
值得注意的是,您引用的jQuery UI版本依赖于某个版本的jQuery。如果您没有引用正确的jQuery版本,那么也可能导致错误。
如果您确实需要使用jQuery UI,则需要使用此功能(根据您的版本进行调整,并注意多年后仍然需要type=text/javascript
和language=javascript
。):
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
您可以在此处获取正确的内容分发网络(CDN)路径:
但是,如果你没有在页面中使用jQuery或jQuery UI,那么删除这两行。
答案 1 :(得分:1)
我发现了问题。事实证明,jQuery认为它在没有带DOM的窗口的环境中。
来自jQuery.js第17行:
# config/multi_domain.rb
ActionView::PartialRenderer.class_eval do
def find_template_with_multi_store(path, locals)
prefixes = path.include?(?/) ? [] : @lookup_context.prefixes
store_prefixes = prefixes
store_path = path
if @view.respond_to?(:current_store) && @view.current_store && !@view.controller.is_a?(Spree::Admin::BaseController)
store_prefixes = (store_prefixes.map { |i| i.gsub('spree/', "spree/#{@view.current_store.code}/") } + store_prefixes).uniq unless store_prefixes.nil?
store_path = store_path.gsub('spree/', "spree/#{@view.current_store.code}/") unless store_path.nil?
end
begin
@lookup_context.find_template(store_path, store_prefixes, true, locals, @details)
rescue ::ActionView::MissingTemplate
@lookup_context.find_template(path, prefixes, true, locals, @details)
end
end
alias_method_chain :find_template, :multi_store
end
ActionView::TemplateRenderer.class_eval do
def find_template_with_multi_store(name, prefixes = [], partial = false, keys = [], options = {})
if prefixes.nil?
store_prefixes = nil
elsif @view.respond_to?(:current_store) && @view.current_store && !@view.controller.is_a?(Spree::Admin::BaseController)
spree = /^spree\//
store_prefixes = []
prefixes.each do |i|
store_prefixes << i.gsub(spree, "spree/#{@view.current_store.code}/") if i.match(spree)
end
store_prefixes = (store_prefixes + prefixes).uniq
else
store_prefixes = prefixes
end
begin
@lookup_context.find_template(name, store_prefixes, partial, keys, options)
rescue ::ActionView::MissingTemplate
@lookup_context.find_template(name, prefixes, partial, keys, options)
end
end
alias_method_chain :find_template, :multi_store
end
Ghettofix解决方案:
删除整个'if句子'并仅保留此内容: if ( typeof module === "object" && typeof module.exports === "object" ) {
// For CommonJS and CommonJS-like environments where a proper `window`
// is present, execute the factory and get jQuery.
// For environments that do not have a `window` with a `document`
// (such as Node.js), expose a factory as module.exports.
// This accentuates the need for the creation of a real `window`.
// e.g. var jQuery = require("jquery")(window);
// See ticket #14549 for more info.
module.exports = global.document ?
factory( global, true ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
};
} else {
factory( global );
}
我不确定为什么会这样,但我最好的猜测是电子应用程序,它既有DOM的前端和没有DOM的后端,jQuery选择了后端。