当分配给全局变量时,websockets不起作用

时间:2013-11-02 18:22:20

标签: javascript html5 node.js websocket

我使用websockets以及javascript和html5

我有以下代码。

    <input type="text" onFocus=" so = new websocket('ws://localhost:1234');" onBlur="so.close();" onKeyUp="keyup();" >

    <script type='text/javascript'>
    var so; //this is global...

//wait a little (user stops typing)    
   function keyup(){
if (timeout) {clearTimeout(timeout);}    
    timeout = setTimeout(lookup, 250);
}



    function lookup(){
      //it's global, so use it right away
      so.onopen = function(){
      //send data to server to get responce...

因此,如果用户点击/不是文本字段,则会打开/关闭websockets。用户在文本字段上键入内容。 textfield的值被发送到服务器,执行查询,如果有匹配的结果,它们会在用户的屏幕上呈现。

如果我单击文本字段,我在控制台中看到“已连接”,如果我点击任何其他内容,我会看到“正常关闭”,就像我应该的那样。没关系。

但是当我在文本字段中键入letteres时,要将数据发送到服务器,则不会发送任何内容。我在控制台中什么都看不到。我没有看到任何错误。

我错过了什么?这就像so.onopen永远不会被执行。

有什么建议吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

问题是您重新创建套接字但不绑定onopen事件处理程序。

在焦点上,你应该调用一个函数同时执行:创建websocket并绑定onopen事件处理程序:

<input id=someid type="text" onBlur="so.close();" >

<script type='text/javascript'>
var so, field = document.getElementById('someid');
field.onfocus = function(){
    so = new websocket('ws://localhost:1234');
    so.onopen = function(){
         // do things
    }
}
相关问题