2013-02-02 67 views
-1

我有一個示例代碼:onkeyup使用JavaScript刪除關鍵字時不工作?

<input type="text" class="" id="key" name="key" value="ex: IPhone 4S" 
    onfocus="cleanPhoneBox(this);" 
    onblur="fillPhoneBox(this);" 
    onkeyup="javascript:search_phones('demo.php');"> 

和JavaScript

function cleanPhoneBox(obj) { 
    if(obj.value == obj.defaultValue) { 
     obj.value = ''; 
     obj.className = ''; 
    } 
} 

function fillPhoneBox(obj) { 
    if(obj.value == '') { 
     obj.value = obj.defaultValue; 
     obj.className = 'search_tool_tip'; 
    } 
} 

var lasttimeout = 0; 
function search_phones(ajaxdomain) { 
    search_string = $('#key').val();  
    if(search_string.length >= 2) { 
     if(lasttimeout) clearTimeout(lasttimeout); 
     lasttimeout = setTimeout('search_phones_call(\"'+ajaxdomain+'\", \"'+search_string+'\")', 300); 
    } 
} 

function search_phones_call(ajaxdomain, search_string) { 
    $('#searchPhoneResultsContainer').empty(); 
    $.ajax({ 
     type:"GET", 
     url : ajaxdomain + '?jsoncallback=?', 
     data: { 
      action: "dialog", 
      type: "searchPhonesJSON", 
      query: search_string, 
      itemsCount: 100, 
      nocache: 96316638 
     }, 
     dataType:'json' 
    }); 
} 

當我用關鍵字搜索: 「iphone 4」 是結果調用JSON阿賈克斯OK,但是當delete keywordsearch again是結果可以」 t調用ajax json回調,如何修復它

+0

所以,問題是'delete'關鍵字不在產生AJAX請求而不是實際的'keyup'事件本身時產生結果?您是否使用'delete'關鍵字驗證過服務器實際返回結果? –

回答

0

您正在動態構建函數調用字符串到setTimeout,該函數調用Javascript的eval命令。出於這種原因,最好避免使用setTimeout的字符串參數。

嘗試讓JQuery的管理回調:

$.ajax({ 
     type:"GET", 
     url : ajaxdomain, 
     cache : false, 
     data: { 
      action: "dialog", 
      type: "searchPhonesJSON", 
      query: search_string, 
      itemsCount: 100 
     }, 
     dataType:'jsonp' 
    }) 
    .then(function(data) 
    { 
     // what you want to do with the server response goes here 
    }); 

但是,如果你想只解決您setTimeout代碼,可以使用匿名函數:

lasttimeout = setTimeout(function() 
{ 
    search_phones_call(ajaxdomain, search_string) 
}, 300);