Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 奇怪的jQuery.load行为_Javascript_Jquery_Html_Canvas_Onload - Fatal编程技术网

Javascript 奇怪的jQuery.load行为

Javascript 奇怪的jQuery.load行为,javascript,jquery,html,canvas,onload,Javascript,Jquery,Html,Canvas,Onload,我试图使用jQuery.load()方法将外部html加载到div中。 我从document.ready()调用此方法 html.1 <script type='text/javascript' src='js/jquery-1.7.1.min.js'></script> <script type='text/javascript' src='js/script1.js'></script> ... 文件已加载,但直到我按F5(刷

我试图使用jQuery.load()方法将外部html加载到div中。 我从document.ready()调用此方法

html.1

    <script type='text/javascript' src='js/jquery-1.7.1.min.js'></script>
    <script type='text/javascript' src='js/script1.js'></script>
...
文件已加载,但直到我按F5(刷新),有时甚至按ctrl-F5,有时(3-5),文件才会显示。如果我不按F5键,页面将永远不会显示,但是如果按F5键,页面将始终显示

加载到div中的HTML在其window.onload中进行大量画布绘制

drawings.html

<script>
var init = function() {
   var container = document.getElementById('MyCanvas');
   var canvas = document.createElement('canvas');
   canvas.width = container.clientWidth;
   canvas.height = 1000;
   container.appendChild(canvas);
   return canvas;
}

window.onload = function()
{
   var canvas = init();
   var context = canvas.getContext('2d');
   context.beginPath();
   //... lots of drawings here
   context.closePath();
};

</script>
...
<div id='MyCanvas'>
</div>

var init=函数(){
var container=document.getElementById('MyCanvas');
var canvas=document.createElement('canvas');
canvas.width=container.clientWidth;
画布高度=1000;
container.appendChild(画布);
返回画布;
}
window.onload=函数()
{
var canvas=init();
var context=canvas.getContext('2d');
context.beginPath();
//…这里有很多画
closePath();
};
...
当我移除这个画布并放置一些静态HTML时,它会毫无问题地显示出来


有人能解释一下这里发生了什么事吗

尝试将window.onload更改为命名函数,并在回调中调用该函数以加载。大概是这样的:

$(document).ready(function() {
   $('div.dropzone').load('drawings.html', function() {
      doMyNewNamedFunction();
    }
});
试试这个

$.get('/drawings.html', function(data) {
  $('div.dropzone').html(data);
  console.log('Load was performed.');
});

您看到的是竞争条件,有时窗口加载事件在div加载内容之前触发,导致加载的js绑定到一个已触发且不会再次触发的事件。

window.onload可能在加载drawings.html时已触发。为什么不使用jquery和文档的ready事件来执行所有init()序列化和绘图呢。jQuery将始终调用您的函数,即使事件已经通过


顺便说一句,我是真正javascript的拥护者。。。但在这种情况下,页面上已经有了坚实的框架。。。使用它;)

您可以添加一个window.location();在div dropzone之后load@JonathanRomer:为什么?我正在尝试将其加载到div.I ment try location.reload();行为类似于“f5”。使用
.load
并不是不推荐的,而是事件之一被折旧。此外,问题出在drawings.html中的代码:它假设window.load未被激发。。。这只是有时候的情况。。。纯粹是偶然的。@BrianNoah:尝试过:没有任何区别。@Flot2011,请务必查看您的控制台以查看错误所在。还可以尝试console.log(data)查看是否有错误。我同意,看起来确实如此,问题是我能做什么?你不能使用窗口加载事件,而是按照steve guy的建议使用.load方法的回调。他可能永远不知道命名函数,因为它存在于外部脚本中。。。他可能有控制权,也可能没有控制权。好吧,你可以在回调中再次手动触发window.onload(),但我不确定这可能会导致什么副作用。假设我事先知道这个命名函数,这就可以了。所以我接受你的答案,并且+1它。现在的问题是,如何找到这个函数名。有没有什么方法可以“扫描”html文件并找到所有存在的函数?但我想这是另一个问题。这是可能的!在这里:
$.get('/drawings.html', function(data) {
  $('div.dropzone').html(data);
  console.log('Load was performed.');
});