使用javascript删除关键字时,onkeyup无法正常工作?

时间:2013-02-02 03:55:12

标签: javascript jquery json callback

我有一个示例代码:

<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 ajax OK,但是当delete keywordsearch again结果无法调用ajax json回调时,如何修复它

1 个答案:

答案 0 :(得分:0)

您正在动态构建一个调用Javascript setTimeout命令的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);