2016-04-25 70 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">