繁体   English   中英

如何防止在ajax请求后滚动页面(返回false无效或错误的位置)

[英]How to prevent the page from scrolling after an ajax request (return false not working or maybe in the wrong palce)

我想显示一棵树,其中包含有关生命目录的信息,其中包括王国,门,阶等信息。 我正在使用ajax / php与mySQL数据库进行交互,同时使用javascript显示和输出信息。 我终于完成了我想要做的事情:单击扩展和折叠,仅加载一次,等等。但是每次在滚动限制以下单击某项时,它都会弹回到页面顶部。 我对此进行了研究,并看到了有关在函数或标记中包含“ return false”的信息,但这并不能解决问题。 我只是把它放错了地方吗? 谢谢你的帮助...

这是代码:以其php / javascript优点...

    <?php
        include ('includes/functions.php');
        $connection=connectdb();

        $result=runquery('
        SELECT scientific_name_element.name_element as shortname ,taxon_name_element.taxon_id as taxonid
        FROM taxon_name_element
        LEFT JOIN scientific_name_element ON taxon_name_element.scientific_name_element_id = scientific_name_element.id
        LEFT JOIN taxon ON taxon_name_element.taxon_id = taxon.id
        LEFT JOIN taxonomic_rank ON taxonomic_rank.id = taxon.taxonomic_rank_id
        LEFT JOIN taxon_name_element AS tne ON taxon_name_element.parent_id = tne.taxon_id
        LEFT JOIN scientific_name_element AS sne ON sne.id = tne.scientific_name_element_id
        LEFT JOIN taxon AS tax ON tax.id = tne.taxon_id
        LEFT JOIN taxonomic_rank AS tr ON tr.id = tax.taxonomic_rank_id
        WHERE taxon_name_element.parent_id is NULL');
    set_time_limit(0);
    ini_set('max_execution_time',0);
    ?> 
<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.js"></script>
        <script type="text/javascript">
        function load_children(id){
            if(document.getElementById(id).active != 'true'){
                if(document.getElementById(id).loaded != 'true'){
            if (window.XMLHttpRequest)
                {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();}
            else
                {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}

            xmlhttp.onreadystatechange=function()
                {//actual stuff
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {//change the text
                    this.active='true'
                    //document.getElementById(id).innerHTML = xmlhttp.responseText;
                    var oNewNode = document.createElement("ul");
                    document.getElementById(id).appendChild(oNewNode);
                    document.getElementById(id).active = 'true';
                    document.getElementById(id).loaded = 'true';
                    oNewNode.innerHTML="<i>"+xmlhttp.responseText+document.getElementById(id).active+"</i>";


                    }
                }
            xmlhttp.open("GET","new.php?id="+id,true);
            xmlhttp.send(false);

       }else{
$("#"+id).children().children().show(); document.getElementById(id).active =                                  'true'}}else{ $("#"+id).children().children().hide();
        document.getElementById(id).active = 'false';
        }return false;}
        </script>
    </head>
    <body>
    <?php 
    echo "<ul>";



        while($taxon_name_element = mysql_fetch_array($result)){
            echo    "
            <li id=\"{$taxon_name_element['taxonid']}\" style=\"display:block;\"><a href=\"#{$taxon_name_element['taxonid']}\" onclick=\"load_children({$taxon_name_element['taxonid']});return false;\">{$taxon_name_element['shortname']}</a></li>
            ";}
    echo "</ul></body></html>";
    ?> 

您错过了右括号-如果在我认为您需要的地方添加注释,然后将其弹出。 如果JS出现错误,则通常不会执行,而是会退回到非JS(即,由于错误而不会返回false)。 运行此程序时是否收到实际错误? 在调试JS时, console是一个很好的朋友。

像下面这样格式化您的代码,也将有助于更轻松地识别任何缺少的元素。

function load_children(id)
{
    if(document.getElementById(id).active != 'true')
    {
        if(document.getElementById(id).loaded != 'true')
        {
            if (window.XMLHttpRequest)
            {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {
                // code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }

            xmlhttp.onreadystatechange=function()
            {
                //actual stuff
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    //change the text
                    this.active='true'
                    //document.getElementById(id).innerHTML = xmlhttp.responseText;
                    var oNewNode = document.createElement("ul");
                    document.getElementById(id).appendChild(oNewNode);
                    document.getElementById(id).active = 'true';
                    document.getElementById(id).loaded = 'true';
                    oNewNode.innerHTML="<i>"+xmlhttp.responseText+document.getElementById(id).active+"</i>";
                }
            }

            xmlhttp.open("GET","new.php?id="+id,true);
            xmlhttp.send(false);

        } // This was missing - were you getting an error?

    }
    else
    {
        $("#"+id).children().children().show(); document.getElementById(id).active = 'true'}
    }
    else
    {
        $("#"+id).children().children().hide();
        document.getElementById(id).active = 'false';
    }
    return false;
}

完成检查后,如果一切正常,请看一下: http : //api.jquery.com/jQuery.get/-示例位于底部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM