2012-01-06 122 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

相關問題