2011-11-23 77 views
2

我在标题上做了一个快速Google,并用所有这些我不明白的代码敲打。要调用Javascript函数的事件当innerHTML已完成100%时

我一直在JavaScript编程几年,现在对大多数概念都很满意。除事件处理外。吓到我了!

我有我写了一个脚本,针对一格,即垂直滚动基于纯粹的鼠标位置的DIV的问题。

我得到容器的高度,以及将“溢出”的内部容器的高度。

将它们分开以获得“差异”,然后通过此差异多倍鼠标位置以根据鼠标位置获取div滚动。

它给了我一个不错的干净滚动!

(如果有人想在更多的相关信息只问)

我的问题是。这个div的内容由ajax生成。

因此,当计算内部和外部div的高度的代码运行时,它会给出不正确的高度,因为它们还没有被数据填充。

因此,当ajax已将数据复制到innerHTML以调用mousescroll函数时,我需要触发一个函数。

额外

问题:我有一个填充滚动格2所AJAX调用。有时一个在另一个之前被提取,反之亦然。所以我需要mousescroll函数来触发WHEN,并且只有当两个ajax调用已经完全将所有数据输入到它们可以使用的html中!

我在想只是增加一个setTimeout,但是...我不喜欢强迫我的脚本等待!

+0

您是否使用任何框架/库/实用程序函数为您的ajax调用? – bezmax

+0

即使我想在同样的工作,我使用.net 4.0。好的问题,解决方案会很有趣:) – Murtaza

+0

起初我并不想依赖于jquery,但在意识到我无法修复跨浏览器依赖性*咳嗽* IE *咳嗽*我决定去jQuery-1.7.1 –

回答

1

我不是100%清楚问题出在哪里。你写道:“当ajax已经将数据复制到innerHTML来调用mousescroll函数时,我需要触发一个函数。” - 你需要帮助那部分吗?如果您使用的是jQuery,那么您只需拨打$.ajaxsuccess回调函数中的mousescroll函数即可。

正如你指出的,但是,这是由你带了另一个问题复杂化:实际上有两个Ajax调用,你想他们调用mousescroll功能之前完成。要解决这个问题,只需创建一个等于零的变量,然后在success回调中增加它。这些回调还会检查变量的值,如果它等于1(表示Ajax调用已完成),请调用mousescroll函数。

伪代码:根据您的descripion

var numOfAjaxCalls = 0; 

$.ajax({ 
    ... 
    success: function(){ 
     if(numOfAjaxCalls = 1){ 
      mousescroll(); 
     }else{ 
      numOfAjaxCalls++; 
     } 
    } 
}); 
+0

对不起,混淆。基本上我需要在ajax获取数据时运行一个函数。然而。我的ajax函数获取大量的json数据,解析它,然后使用.innerHTML方法,将解析的数据插入到容器中,现在发生了两次。我想过关于“成功”命令的功能,但是......成功事件在接收到ajax时触发,还是在innerHTML函数完成时触发?因为我真的需要在发射前确保容器已满。并且“成功”似乎只在请求成功时才被调用!谢谢 –

+0

@ AlexMorley-Finch:我认为innerHTML是同步的,所以没有办法处于“innerHTML没有完成”的状态 – hugomg

+0

@ AlexMorley-Finch - 当ajax调用完成时,成功处理器触发成功的)。所以它是在成功处理程序中,您将解析JSON并注入HTML。 – maxedison

1

,你需要处理的jQuery的成功事件的AJAX,然后在你的代码处理实际的“完整”事件一旦两个AJAX事件已经完成,按照您的要求正确处理。

相关问题