jQuery.proxy()函数未在Chrome

时间:2016-01-05 17:03:37

标签: javascript jquery ajax google-chrome proxy

我面临的问题是,即使代理已成功加载(,我可以告诉),也不会调用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开发人员工具上没有显示错误,是否还有其他地方可以查看以进行诊断?

提前谢谢。

1 个答案:

答案 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.Initialisecontext

另请注意问题this上的js称为函数;应该引用函数jQuery.proxy( function, context [, additionalArguments ] )