我面临的问题是,即使代理已成功加载(,我可以告诉),也不会调用jQuery函数。我们正在进行的调用在第一次加载时工作正常,但是当我们尝试在via AJAX中加载这个脚本时,它会将所需的$ .proxy()调用到Initialise函数,但实际上并没有调用该函数。
动态加载的代码是:
<script language="JavaScript"><!--
var ctrl = new VideoControl({"Id":"bc1093c8290a4037846c2052695a7d3a"}, "...");
//-->
</script>
创建对象的javascript是:
function VideoControl(controlIds, videoMarkUp) {
this.controlIds = controlIds;
this.videoMarkUp = videoMarkUp;
var thisControl = this;
$(function () { $.proxy(thisControl.Initialise(), thisControl); });
}
VideoControl.prototype.Initialise = function () {
// do stuff
}
因此调用main函数,但是当通过Chrome或IE中的AJAX控件加载时,不调用Initialise()...但是这在Firefox中有效。
有一个stackoverflow answe r解释了为什么没有调用$函数但是如何将它调到它将调用的点(类似于firefox处理它的方式)< / p>
在使用jQuery与其他浏览器时,是否有人知道firefox的做法有所不同?
Chrome开发人员工具上没有显示错误,是否还有其他地方可以查看以进行诊断?
提前谢谢。
答案 0 :(得分:3)
因此调用main函数,但不调用Initialise() 这是通过AJAX加载的
$(function() {})
是.ready()
的别名; .ready()
的处理程序最多应调用一次。加载文档后似乎发生了AJAX? ,.ready()
之前已调用,$.isReady
设置为true
,阻止后续.ready()
或$(function(){})
内的处理程序被调用。
尝试删除围绕
的$(function() {})
包装器
function VideoControl(controlIds, videoMarkUp) {
this.controlIds = controlIds;
this.videoMarkUp = videoMarkUp;
var thisControl = this;
$.proxy(thisControl.Initialise, thisControl);
}
使用
$(document).ready(VideoControl)
但是,不确定为什么在这里使用$.proxy
? ,因为context
的{{1}}似乎没有更改为其他thisControl.Initialise
:context
?
另请注意问题this
上的js
称为函数;应该引用函数jQuery.proxy( function, context [, additionalArguments ] )