none
为什么在文本框输入时,ajax老是有undefined,敲空格也出现。不知道是什么原因? RRS feed

  • 问题

  • 这是页面调人
    <script language="jscript" type="text/javascript">
            mainLoop = function()
            {
                val = escape(queryField.value );
                if( lastVal != val )
                {
                    var response =_liebiao.GetSearchltems(val);
                    response.ContentType=("text/xml;charset=UTF-8");
                  
                    showQueryDiv(response.value );
                    lastVal = val;
                }
                setTimeout('mainLoop()', 100);
                return true;
            }       
        </script>
    这是后台调用代码
    [AjaxPro.AjaxMethod()]
        public ArrayList GetSearchltems(string strQuery)
        {
            dataclass d = new dataclass();
            ArrayList items = new ArrayList();
            strQuery = Regex.Replace(strQuery, @"[?!.,,!?'‘”“、><()。《》;:——]", " ", RegexOptions.IgnoreCase);
          
            DataSet ds = d.WebSearch(Server.UrlDecode(strQuery),0);//从数据库取数据
            int ss = 0;
            if (ds.Tables[0].Rows.Count > 6)
            {
                ss = 8;
            }
            else
            {
                ss = ds.Tables[0].Rows.Count;
            }

            for (int i = 0; i < ss; i++)
            {
                int i2 = ds.Tables[0].Rows[i][1].ToString().ToUpper().IndexOf(Server.UrlDecode(strQuery).ToUpper());
                string strs = ds.Tables[0].Rows[i][1].ToString().ToUpper().Substring(i2);
                if (strs.IndexOf(Server.UrlDecode(strQuery).ToUpper()) == 0)
                {
                    string titles = strs;
                    if (i2 == 0)
                    {
                        items.Add(title(titles,12));
                    }
                    else
                    {
                        items.Add(title(titles, i2 + 2));
                       
                    }
                }
            }
            return items;

        }

    2009年5月12日 9:37

答案

  • 试试,

    function showQueryDiv(resultArray)
    {
        var div = getDiv(divName);
        while (div.childNodes.length > 0)
        {
            div.removeChild(div.childNodes[0]);
        }
        for (var i = 0; i < resultArray.length; i++)
        {
            if (typeof (resultArray[i]) != 'undefined')
            {
                var result = document.createElement("div");
                result.style.cursor = "pointer";
                result.style.padding = "2px 0px 2px 0px";
                result.style.width = div.style.width; //Add width        
                _unhighlightResult(result);
                result.onmousedown = selectResult;
                result.onmouseover = highlightResult;
                result.onmouseout = unhighlightResult;

                var value = document.createElement("span");
                value.className = "value";
                value.style.textAlign = "left";
                value.innerHTML = resultArray[i];
                result.appendChild(value);
                div.appendChild(result);
            }
        }
        showDiv(resultArray.length > 0);
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Love波波 2009年5月13日 3:54
    2009年5月13日 3:46
    版主

全部回复

  • 可以做在出错的地方做一个简单的判断

    if (typeof(xxx) == 'undefined')
    return;

    知识改变命运,奋斗成就人生!
    2009年5月12日 10:19
    版主
  • 也不是一个错误啊

    2009年5月13日 2:04
  • 你可以把你完整的代码帖出来嘛,
    知识改变命运,奋斗成就人生!
    2009年5月13日 2:05
    版主
  • 这是js格式文件信息
    我是用的AJAX控件,其它代码没有
    //// JScript File
    var DIV_BG_COLOR = "#f2fae3";
    var DIV_HIGHLIGHT_COLOR = "#cccccc";
    var DIV_FONT = "Arial";
    var DIV_PADDING = "1px";
    var DIV_BORDER = "1px solid #CCC";
    var queryField;
    var divName;
    var ifName;
    var lastVal = "";
    var val = "";
    var globalDiv;
    var divFormatted = false;

    function InitQueryCode( queryFieldName, hiddenDivName )
    {   
        queryField = document.getElementById( queryFieldName );
        queryField.onblur = hideDiv;
        queryField.onkeydown = keypressHandler;
        queryField.autocomplete = "off";
       
        if( hiddenDivName )
        {
            divName = hiddenDivName;
        }
        else
        {
            divName = "querydiv";
        }
       
        ifName = "queryiframe";
        setTimeout("mainLoop()",100);
    }

    function getDiv(divID)
    {
        if(!globalDiv)
        {
            if(!document.getElementById(divID))
            {
                var newNode = document.createElement("div");
                newNode.setAttribute("id", divID);
                document.body.appendChild(newNode);
            }
            globalDiv = document.getElementById(divID);
            var x = queryField.offsetLeft;
            var y = queryField.offsetTop + queryField.offsetHeight;
            var parent = queryField;
            while(parent.offsetParent)
            {
                parent = parent.offsetParent;
                x += parent.offsetLeft;
                y += parent.offsetTop;
            }
            if(!divFormatted)
            {
                globalDiv.style.backgroundColor = DIV_BG_COLOR;
                globalDiv.style.fontFamily = DIV_FONT;
                globalDiv.style.padding = DIV_PADDING;
                globalDiv.style.border = DIV_BORDER;
                globalDiv.style.width = "200px";
                globalDiv.style.fontSize = "90%";           
                globalDiv.style.position = "absolute";
                globalDiv.style.left = x + "px";
                globalDiv.style.top = y + "px";
                globalDiv.style.visibility = "hidden";
                globalDiv.style.zIndex = 10000;
                divFormatted = true;
       
            }
        }
        return globalDiv;
    }

    function showQueryDiv(resultArray)
    {
        var div = getDiv(divName);
        while( div.childNodes.length > 0 )
        {
            div.removeChild(div.childNodes[0]);
        }
        for(var i = 0; i < resultArray.length; i++)
        {
            var result = document.createElement("div");
            result.style.cursor = "pointer";
            result.style.padding = "2px 0px 2px 0px";
            result.style.width = div.style.width;//Add width       
            _unhighlightResult(result);
            result.onmousedown = selectResult;
            result.onmouseover = highlightResult;
            result.onmouseout = unhighlightResult;       
           
            var value = document.createElement("span");
            value.className = "value";
            value.style.textAlign = "left";
    //      value.style.fontWeight = "bold";       
            value.innerHTML = resultArray[i];
            result.appendChild(value);
            div.appendChild(result);       
        }
        showDiv(resultArray.length > 0);
    }

    function selectResult()
    {
        _selectResult(this);
    }
    function _selectResult( item )
    {
        var spans = item.getElementsByTagName("span");
        if( spans )
        {
            for(var i = 0; i < spans.length; i++)
            {
                if( spans[i].className == "value" )
                {
                    queryField.value = spans[i].innerHTML;
                    lastVar = val = escape( queryField.value );
                    mainLoop();
                    queryField.focus();
                    showDiv( false );
                    return;
                }
            }
        }
    }

    function highlightResult()
    {
        _highlightResult( this );   
    }

    function _highlightResult( item )
    {
        item.style.backgroundColor = DIV_HIGHLIGHT_COLOR;
    }

    function unhighlightResult()
    {
        _unhighlightResult( this );
    }

    function _unhighlightResult( item )
    {
        item.style.backgroundColor = DIV_BG_COLOR;
    }

    function showDiv( show )
    {
        var div = getDiv( divName );
        if( show )
        {
            div.style.visibility = "visible";
        }
        else
        {
            div.style.visibility = "hidden";
        }
        adjustiFrame();
    }

    function hideDiv()
    {
        showDiv( false );
    }

    function keypressHandler(evt)
    {
        var div = getDiv( divName );
        if( div.style.visibility == "hidden" )
        {
            return true;
        }
        if( !evt && window.event )
        {
            evt = window.event;
        }
        var key = evt.keyCode;
       
        var KEYUP = 38;
        var KEYDOWN = 40;
        var KEYENTER = 13;
        var KEYTAB = 9;
        if(( key != KEYUP ) && ( key != KEYDOWN ) && ( key != KEYENTER ) && ( key != KEYTAB ))
        {
            return true;
        }
        var selNum = getSelectedSpanNum( div );
        var selSpan = setSelectedSpan( div, selNum );
        if( key == KEYENTER || key == KEYTAB )
        {
            if( selSpan )
            {
                _selectResult(selSpan);
            }
            evt.cancelBubble= true;
            return false;
        }   
        else
        {
            if( key == KEYUP)
            {
                selSpan = setSelectedSpan( div, selNum - 1 );          
            }
            if( key == KEYDOWN )
            {
                selSpan = setSelectedSpan( div, selNum + 1 );
            }
            if( selSpan )
            {
                _highlightResult( selSpan );
            }
        }
        showDiv( true );
        return true;
    }

    function getSelectedSpanNum( div )
    {
        var count = -1;
        var spans = div.getElementsByTagName("div");
        if( spans )
        {
            for( var i = 0; i < spans.length; i++)
            {
                count++;
                if( spans[i].style.backgroundColor != div.style.backgroundColor )
                {
                    return count;
                }
            }
        }
        return -1;
    }
    function setSelectedSpan( div, spanNum )
    {
        var count = -1;
        var thisDiv;
        var divs = div.getElementsByTagName("div");
        if( divs )
        {
            for( var i = 0; i < divs.length; i++ )
            {
                if( ++count == spanNum )
                {
                    _highlightResult( divs[i] );
                    thisDiv = divs[i];
                }
                else
                {
                    _unhighlightResult( divs[i] );
                }
            }       
        }
        return thisDiv;
    }

    function adjustiFrame()
    {
        if(!document.getElementById(ifName))
        {
            var newNode = document.createElement("iFrame");
            newNode.setAttribute("id", ifName);
            newNode.setAttribute("src","javascript:false;");
            newNode.setAttribute("scrolling","no");
            newNode.setAttribute("frameborder","0");
            document.body.appendChild( newNode );  
        }
        iFrameDiv = document.getElementById( ifName );
        var div = getDiv( divName );   
        try
        {
            iFrameDiv.style.position = "absolute";       
            iFrameDiv.style.width = div.offsetWidth;
            iFrameDiv.style.height = div.offsetHeight;
            iFrameDiv.style.top = div.style.top;
            iFrameDiv.style.left = div.style.left;
            iFrameDiv.style.zIndex = div.style.zIndex - 1;
            iFrameDiv.style.visibility = div.style.visibility;          
        }
        catch (e)
        {}
    }

    还有页面文本框处代码
    <asp:TextBox ID="txts" runat="server" Width="200px"></asp:TextBox>
                      <script language="jscript" type="text/javascript">
            InitQueryCode("" + '<%= txts.ClientID%>' + "");
        </script> 

    2009年5月13日 2:41
  • 错误可能在 mainLoop 方法中,但上面没有此方法,你可以自己用 alter(msg) 弹出消息 + 错误提示的方式找找,应该不难找
    知识改变命运,奋斗成就人生!
    2009年5月13日 2:54
    版主
  • mainloop方法封装了。但是运行正常,不提示有错误。就是在响应的时候有时会弹出undefined。敲一个空格也会弹出undefined。
    2009年5月13日 3:00
  • function InitQueryCode( queryFieldName, hiddenDivName )
    {    
        queryField = document.getElementById( queryFieldName );
        queryField.onblur = hideDiv;
        queryField.onkeydown = keypressHandler;
        queryField.autocomplete = "off";
        
        if( hiddenDivName )
        {
            divName = hiddenDivName;
        }
        else
        {
            divName = "querydiv";
        }
        
        ifName = "queryiframe";
        setTimeout("DoMainLoop()", 100);
    }
    
    function DoMainLoop() {
        try {
            mainLoop();
        } catch (e) { 
        }
    }
    这样试试,不过只能屏蔽错误
    知识改变命运,奋斗成就人生!
    2009年5月13日 3:05
    版主
  • 不行!!
    还是会出现!你有QQ吗?
    2009年5月13日 3:10
  • 把你出错的信息发出来看看
    知识改变命运,奋斗成就人生!
    2009年5月13日 3:10
    版主
  • 不显示出错的地方!

    这是敲空格出现的



    状态栏不出现任何错误信息
    2009年5月13日 3:31
  • function InitQueryCode( queryFieldName, hiddenDivName )


    InitQueryCode("" + '<%= txts.ClientID%>' + "");


    你的函数定义和调用的参数相同吗??

    【孟子E章】
    2009年5月13日 3:33
    版主
  • 试试,

    function showQueryDiv(resultArray)
    {
        var div = getDiv(divName);
        while (div.childNodes.length > 0)
        {
            div.removeChild(div.childNodes[0]);
        }
        for (var i = 0; i < resultArray.length; i++)
        {
            if (typeof (resultArray[i]) != 'undefined')
            {
                var result = document.createElement("div");
                result.style.cursor = "pointer";
                result.style.padding = "2px 0px 2px 0px";
                result.style.width = div.style.width; //Add width        
                _unhighlightResult(result);
                result.onmousedown = selectResult;
                result.onmouseover = highlightResult;
                result.onmouseout = unhighlightResult;

                var value = document.createElement("span");
                value.className = "value";
                value.style.textAlign = "left";
                value.innerHTML = resultArray[i];
                result.appendChild(value);
                div.appendChild(result);
            }
        }
        showDiv(resultArray.length > 0);
    }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Love波波 2009年5月13日 3:54
    2009年5月13日 3:46
    版主
  • 虽然 OK 了,便你最好还是找找 resultArray 值不正常的原因
    知识改变命运,奋斗成就人生!
    2009年5月13日 3:55
    版主
  • 可以了!!
    谢谢了!

    2009年5月13日 3:56