Javascript简单脚本不会执行

时间:2011-07-13 02:56:07

标签: javascript

我一直对学习JS犹豫不决,因为我不得不试图调试脚本。与C#/ C ++等IDE相比,对此类内容的支持较差。

我正在尝试使用简单的PHP和JS脚本从MySQL数据库中检索数据,但似乎没有触发“onchange”:

<!DOCTYPE HTML>

<html>

<head>

<script type='text/javascript'>

function ShowUser(name)
{
    if(name == "")
    {
        document.getElementById("display").innerHTML = "Please enter a username to check";
        return;
    }
    if(window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest();
    }
    else
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function()
    {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            document.getElementById("display").innerHTML = xmlhttp.responseText;
        }
    };

    xmlhttp.open("GET", "index.php?uName=" + name, true);
    xmlhttp.send();

}

</script>

</head>

<body>

<form>

    <?php
        $data = array();
        if(!empty($_GET['uName']))
        {
            $r = mysql_connect("localhost", "root", "pass") or die("Couldn't connect to db");
            mysql_select_db("db", $r) or die ("Couldn't select db");
            $q = mysql_query("select * from users where uName = '{$_GET['uName']}'") or die("Couldn't query table");
            $data = mysql_fetch_assoc($q);
            mysql_close($r);
        }

    ?>

    <input type="text" name="fUName" onchange="ShowUser(this.value);" style="width:125px;">

</form>

<div id="display"><?php print_r($data); ?></div>

</body>

</html>

一定是愚蠢的我不在乎。大部分代码都来自W3schools,并使用我自己的PHP和HTML。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

看起来你的代码甚至没有被调用的原因是因为onchange事件直到文本输入失去焦点之后才被触发(至少,这是Chrome中发生的事情)。所以你可能会像疯了一样改变文本框的值,但永远不要点击它,所以没有任何反应。

答案 1 :(得分:1)

实际上有许多很棒的工具,例如Closure JavaScript compiler,它可以执行类型检查和JavaScript的其他静态分析,Chrome developer tools,这使得可以测试JavaScript飞行并观察和调试JavaScript的执行,以及Firefox的Firebug插件,这与Chrome内置的开发人员工具相当。 (另请参阅my post about type-safety and testability of JavaScript,其中我对这个伟大的工具表示惊讶)。

通过访问'about:blank'并插入*:

,我做了一个测试,看看'onchange'是否是Chrome中的问题
<input type="text" onchange="document.write('changed')" />

我观察到只有在你输入并完成框内容后才会调用change事件。是否每次输入新信件时都会触发您想要触发的错误?您可能希望在Chrome或Firebug中加载页面,并查看脚本控制台以查看是否存在任何错误。

*在Chrome中的开发人员工具中,可以非常轻松地更改页面的DOM以尝试新事物,并在控制台中添加任意JavaScript以实现原型。

此外,您可能会发现Google JavaScript style guide对避免热水有用。

答案 2 :(得分:0)

在您将焦点移出输入框之前,不会触发更改。

如果你想要一个好的调试器,请使用以下方法之一:

  • Chrome / Safari的webkit检查器(又名开发人员工具)
  • Firefox中的Firebug插件
  • IE8 / 9中的开发者工具

这些工具在调试Javascript方面与C#/ C ++的IDE一样好。

答案 3 :(得分:0)

要调试javascript,我建议您使用Chrome网络检查器中的javascript控制台或firefox的Firebug扩展程序。 Opera也有自己的javascript控制台叫做dragonfly。

摘自Google Chome帮助页面:

有几种方法可以查看JavaScript错误并在Google Chrome中调试它们:

JavaScript控制台:点击“网页”菜单图标,然后选择“开发人员”&gt; JavaScript控制台。从这里,您将能够查看JavaScript执行中的错误,并输入其他JavaScript命令来执行。

JavaScript调试器:可用作页面菜单图标&gt;开发人员&gt;调试JavaScript,调试器提供了一个命令提示符,您可以从中设置断点,回溯等。在调试器命令行键入help以开始。