2013-11-02 51 views
0

我使用websockets以及javascript和html5当分配给全局变量时,websocket不起作用

我有以下代码。

<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永远不会被执行。

有什么建议吗?

在此先感谢

回答

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 
    } 
} 
+0

谢谢,但,在'onopen'必须是在另一个函数,我不能改变结构我的代码。奇怪的是,即使我只是把'var so = new WebSocket(“ws:// localhost:8000”);'放在javascript的开头,然后在函数中放入'so.ononpen',仍然没有执行。我没有明白... – slevin

+0

没有什么奇怪的。您绑定在不同的套接字上,因为您不确保指令的顺序。你*有*来改变你的代码的结构。顺便说一下,请注意,如何通过删除内联JavaScript来灌输一些理智。 –

+0

我刚刚编辑我的问题。对不起。希望你能更好地理解我的问题。我没有'field.onfocus = function(){function_keyup(){...'我得到'keyup函数没有定义'错误。 – slevin