2016-04-25 122 views
-1

我试图找出网络工作者的行为,我有点难住,为什么输出只显示并保留消息时,该函数分配给window.onload事件,也为什么在函数的末尾添加一个alert()会在点击'ok'和消息消失之前立即显示消息。网络工作者不与onclick

感谢任何帮助,谢谢。

<form> 
    <button id="button" style="height:30px;">Say hello</button> 
    <input id="output" style="width:200px"></input> 
</form> 
<script> 
    var button = document.getElementById("button"); 
    button.onclick = function(){ 

     var worker = new Worker("worker.js"); 
     worker.postMessage("hello"); 

     worker.onmessage = function(event){ 
     var message = event.data; 
     var output = document.getElementById("output"); 
     output.value = "Worker says " + message; 
     } 

     //alert("Message shows when this alert is here, but as " 
     //  + "soon as you click ok..."); 

    } 
</script> 

worker.js

onmessage = function(){ 
    postMessage("Well hello to you too."); 
} 
+2

如果您向'

+1

订阅后发送消息;我猜工人的胆量在这一点上是非常快的...... – dandavis

+1

是的,类型=按钮已修复它,这是为什么?你还建议我在worker.onmessage之后放置worker.postMessage,或者这样做没有多大区别?感谢您的修复,任何有关此行为的其他信息将不胜感激。 –

回答

2

你的员工发送答复之前,你甚至设置了消息回调。所以当你做worker.onmessage = ...时,"Hello to you too"消息已经消失了。

总是先分配回调,这也适用于onload XHR请求和图像的回调。像这样做:

var worker = new Worker("worker.js"); 

    worker.onmessage = function(event){ 
    var message = event.data; 
    var output = document.getElementById("output"); 
    output.value += "Worker says " + message + "\n"; 
    } 

    worker.postMessage("hello"); 

而且我不知道为什么你使用表单时,这是一个JavaScript程序,你不想送什么东西给服务器...只是使用<div>

<div> 
    <button id="button" style="height:30px;">Say hello</button> 
    <input id="output" style="width:200px"></input> 
</div> 

如果您有<button><form>它发送表单并重新加载页面,当你点击它 - 除非它是<button type="button">