2010-08-25 49 views
1

我有以下的代码加载功能的onclick

<a onclick="$('#result').load('codes/test.html');$('#result').show();" >XHTML code</a> 

它完全加载的test.html的结果DIV的内容,也使其可见。直到这一点都很好。当我尝试添加功能prettyPrint()适用上的文字一些修改和代码更改为以下:

<a onclick="$('#result').load('codes/test.html');$('#result').show();prettyPrint();" >XHTML code</a> 

我不能让prettyPrint()的工作,而不是如果我添加onmouseout="prettyPrint();它工作时我摘下我的光标。我没有使用javascript和jquery的经验,所以我不知道真正的问题是什么,所以我会很感激如何使prettyPrint工作onclick

回答

3

如果您正在使用jQuery你为什么用内嵌的JavaScript烦恼呢?为什么不:

<script type="text/javascript"> 
$(function(){ 
    $('#myLink').click(function(){ 
     $('#result').load('codes/test.html', function() { 
      $('#result').show(); 
      prettyPrint(); 
     }); 

     return false; 
    }); 
}): 
</script> 

<a id="myLink" href="#">XHTML code</a> 

编辑:

固定代码,以便它调用prettyPrint()当负载回调被调用。

+1

-1:这不能解决问题 – 2010-08-25 15:19:09

+0

为什么它不能解决问题? – rochal 2010-08-25 15:22:03

+0

是的,-1也是,即使我像你这样想:“哦,我的上帝停止在线JS!” – 2010-08-25 15:22:14

0

你可以做到以下几点:

$('#result').show("fast",function(){ prettyPrint();}); 
2

负载是异步的。当prettyPrint被调用时,文本可能还没有在那里。

<a onclick="$('#result').load('codes/test.html', function(){prettyPrint();$('#result').show();});" >XHTML code</a> 

load()接受第二个参数,它是一个函数,在加载完成时调用。我把prettyPrint和节目移到了那里。

+0

谢谢,这解决了我的问题! :) – Sotiris 2010-08-25 15:25:45

0

您应该使用一个回调函数:

<a onclick="$('#result').load('codes/test.html', function() {prettyPrint();}).show();" >XHTML code</a> 
0

你的问题是,你误会怎么​​作品。在数据加载之前它不会阻塞。相反,它只有开始加载并立即返回。因此,当数据尚未加载时,您的prettyPrint函数被调用。

要解决此问题,请将回调函数传递给.load。回调将在加载完成时调用:

$("#result").load('...', 
    function() { 
     $("#result").show(); 
     prettyPrint(); 
    } 
} 
+0

或者你可以让'load()'同步工作......只是开玩笑^^ – 2010-08-25 15:23:58