0

所以我在弄清楚为什么我的onchange事件没有触发时遇到了问题。从这里开始是我的表格和我的 JavaScript 的副本

桌子:

<form name="form1" action="submit.php" method='POST'>
    <table border="0" class="signUp">
    <tr><td align="center" class= "signUpfont"> Sign up for FREE </td></tr>
    <tr><td><input type="text" text="First Name" class='signUpinput' id="fname" name="fname" placeholder="First Name" /></td></tr>
    <tr><td><input type="text" class='signUpinput' id="lname" name="lname" placeholder="Last Name"/></td></tr>
    <tr><td><input type="text" class='signUpinput' id="email" name="email" placeholder="Email"/></td></tr>
    <tr><td><input type="text" class='signUpinput' id="email2" name="email2"  placeholder="Re-enter Email"/></td></tr>
    <tr><td><input type="password" class='signUpinput' id="pass" name="pass" placeholder="Password"/></td></tr>
    <tr><td>
                    <select name="country" onchange="getStates()" style="color: white; background-color: #2B4478;">
        <option value="0">Select State</option>
        <option value="louisiana">Louisiana</option>
        <option value="texas">Texas</option>
        <option value="alabama">Alabama</option>
        <option value="mississippi">Mississippi</option>
    </select></td>
            </tr>
            <tr>
        <td><select name="school" style="color: white;background-color: #2B4478;">
        <option value="">Select School</option>
    </select></td></tr>

    <tr><td><input type="submit" name="submit" value="Sign Up" style="color:white; background-color:#2B4478; width: 100px;margin-left: 52px;"></td></tr>
</table>

Javascript:

<script type="text/javascript">
    function getStates()
    {
        var xmlhttp;
        try{
            xmlhttp = new XMLHttpRequest;
           }catch(e)
           {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
               }

        if(xmlhttp)
            {
                var form = document['form1'];
                var country = form['country'].value;

                xmlhttp.open("GET", "getSchools.php?country="+country, true);

                xmlhttp.onreadystatechange = function ()
                {
                    if(this.readyState == 4)
                    {
                        var s = document.createElement('select');
                        s.name = "school";
                        s.style.color = "white";
                        s.style.background = "#2b4478";
                        s.innerHTML = this.responseText;

                        if(form['school'])
                        {
                            form.replaceChild(s, form['school']);

                        }else
                            form.insertBefore(s, form['submit']);
                    }
                }                   

                xmlhttp.send(null)
            }
    }

任何指向我做错的事情的指针将不胜感激。如果我将两个下拉菜单放在同一位置并在其中启动表单,则脚本将起作用,但我无法获取其余的表信息。

4

3 回答 3

0

确保在执行时 HTML 可以访问您的“getStates”函数。这是一个小提琴:http: //jsfiddle.net/2GbH8/

Fiddle 做的事情有点奇怪,所以我不得不将函数分配给一个全局变量:

getStates = function getStates() {...}

小提琴一旦像这样分配就可以工作。

于 2013-07-26T20:44:24.220 回答
0

您的功能正在正确触发。尝试在调试器中的函数上设置断点,看看你遇到了什么错误/或者你的断点是否被命中。

http://jsfiddle.net/7VWhx/1/

   function getStates()
    {
        console.log('getStates fired');
    }
于 2013-07-26T20:26:50.993 回答
0

确保在 onchange 事件触发时 getStates() 存在,即定义它的脚本应该在它之前已经执行。

于 2013-07-26T20:40:24.047 回答