jQuery 插件加载后执行一些操作
我正在将 jQuery
和 jQuery UI
动态加载到页面中,并且我需要知道 jQuery UI
何时成功扩展了 jQuery< /代码>。
目前,我正在使用加载 jQuery UI
的脚本元素的 readystate
来触发我的代码的运行,但我认为在这一点上,脚本已经已加载,但 jQuery UI 尚未正确初始化。
在定义 $.ui
之前轮询是唯一的选择吗?
这是我当前正在处理的代码:
(load_ui = (callback) ->
script2 = document.createElement("script")
script2.type = "text/javascript"
script2.src = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.js"
script2.onload = script2.onreadystatechange = ->
console.log 'readystate:', @readystate
if @readystate == "loaded" or @readystate == "complete"
console.log "jquery ui is loaded"
callback ($ = window.jQuery).noConflict(1), done = 1
$(script,script2).remove()
document.documentElement.childNodes[0].appendChild script2
console.log 'jquery ui script element appended to page'
(window, document, req_version, callback, $, script, done, readystate) ->
if not ($ = window.jQuery) or req_version > $.fn.jquery or callback($)
console.log "begin loading jquery"
script = document.createElement("script")
script.type = "text/javascript"
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + req_version + "/jquery.min.js"
script.onload = script.onreadystatechange = ->
if not done and (not (readystate = @readyState) or readystate == "loaded" or readystate == "complete")
console.log "jquery is loaded, now loading jquery ui"
load_ui(callback)
document.documentElement.childNodes[0].appendChild script
console.log 'jquery script element appended to page'
) window, document, "1.6.1", ($, L) ->
console.log $
console.log $.ui.version
由于某种原因,jquery ui 脚本元素的readystate 只是返回未定义。
I'm dynamically loading jQuery
and jQuery UI
into a page, and I need to know when jQuery UI
has successfully extended jQuery
.
At the moment I'm using the readystate
of the script element that loads jQuery UI
to trigger the running of my code, but I think that at that point, the script has loaded, but jQuery UI
hasn't been properly initialised.
Is the only choice to poll until $.ui
is defined?
Here's the code that I'm currently wrestling with:
(load_ui = (callback) ->
script2 = document.createElement("script")
script2.type = "text/javascript"
script2.src = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.js"
script2.onload = script2.onreadystatechange = ->
console.log 'readystate:', @readystate
if @readystate == "loaded" or @readystate == "complete"
console.log "jquery ui is loaded"
callback ($ = window.jQuery).noConflict(1), done = 1
$(script,script2).remove()
document.documentElement.childNodes[0].appendChild script2
console.log 'jquery ui script element appended to page'
(window, document, req_version, callback, $, script, done, readystate) ->
if not ($ = window.jQuery) or req_version > $.fn.jquery or callback($)
console.log "begin loading jquery"
script = document.createElement("script")
script.type = "text/javascript"
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + req_version + "/jquery.min.js"
script.onload = script.onreadystatechange = ->
if not done and (not (readystate = @readyState) or readystate == "loaded" or readystate == "complete")
console.log "jquery is loaded, now loading jquery ui"
load_ui(callback)
document.documentElement.childNodes[0].appendChild script
console.log 'jquery script element appended to page'
) window, document, "1.6.1", ($, L) ->
console.log $
console.log $.ui.version
For some reason the readystate of the jquery ui script element just returns undefined.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为这将完全满足您的需要,根据需要添加更多依赖项。
I think this will do exactly what you need, add more dependency as much as you like.
我在一些项目中使用了这段代码,以确保某些脚本按顺序运行。它在 IE 上不起作用(而且我没有时间调试),但在其他一切上都工作得很好。
I used this code on some project to ensure that some scripts run sequentially. It did not work on IE (and I didn't have time to debug), but worked fine on everything else.