2013-02-02 30 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);