2012-01-06 51 views
2

* 更新: *我已经回答了我的问题。但你仍然可以给我建议,我会选择你的答案如何做类似于stackoverflow的类似标题搜索

注意:如果你不需要知道我想要做的代码,只需跳过前几个段落,直接看到的代码并告诉我他们为什么不能没有错误地工作。

当你在问题页面输入标题时,我想做类似于标题搜索的类似于stackoverflow的东西。

我需要拆分单词以制作正则表达式,然后在数据库中进行搜索。由于我的申请是中文的(每个单词之间没有空格),我认为使用PHP将中文分成有意义的短语太难了。根据中国输入法的特点,我有一个想法是在客户端使用javascript进行分割,例如,如果你想在中文中输入“你好中国”这个词,人们通常在输入法中输入“nihao [space] zhongguo”注意空格键的位置),因为'你好'(nihao - hello)是一个短语,'中国'(zhongguo - china)是另一个。所以当人们按空格键时,我记录他在空格前输入的单词,并启动一个2秒钟的定时器,如果他或她输入另一个单词清除定时器并继续记录,如果他或她不记录,则将每个记录的单词发送到服务器。

Qustion是,这是一个好主意吗?有没有其他方便的方法来做到这一点?以及为什么我写这些测试行将无法正常工作。

脚本:

$(function(){ 
     var i=0; 
     $('#t').keyup(function(e){ 
      if(e.keyCode==32) 
      { 
       eval("a"+i+"=$(this).val()"); 
       i++; 
       var timer=setTimeout("for(b=0;b<i;b++){alert(eval('a'+b));}",1000); 
       if($("#t").keydown()) 
       { 
        clearTimeout(timer); 
       } 
      } 
     }) 
    }) 

HTML:

<input id="t"/> 

回答

0

我想我知道为什么它不会现在的工作:

首先,i应该是一个全局变量;

二,keydown()函数应该在keyup()之外。修改JS:

$(function(){ 
    i=0; 
    timer=null; 
    $('#t').keyup(function(e){ 
     if(e.keyCode==32) 
     { 
      eval("a"+i+"=$(this).val()"); 
      i++; 
      timer=setTimeout("for(b=0;b<i;b++){alert(eval('a'+b));}",1000) 
     } 
    }) 
    if($("#t").keydown()) 
    { 
     clearTimeout(timer); 
    } 
}) 

如果您对我的想法或代码等建议你还是可以回答这个问题,还是我要选择这一项一段时间后。

+0

使用除“i”以外的全局变量名:S – fmsf 2012-01-06 13:13:53

+3

您不应该使用'eval'或将字符串传递给'setTimeout'。你最好使用一个数组并使用'arr.push($(this).val())'追加它。对于'setTimeout',你也可以传递一个函数。这将使您免于使用全局变量。此外,在任何地方使用'var'并在适当的地方添加分号是一个好主意。 – pimvdb 2012-01-06 13:15:49

相关问题