简单的Javascript表单验证问题

时间:2012-01-27 06:07:08

标签: javascript forms validation

我正在努力整合一组多页表单,这些表单由会话链接,并在每个部分提交时使用Javascript进行表单验证。我的第一个形式是奇妙的工作。我的第二个,不是那么多。它是一个动态创建的表单,它依赖于从数据库填充的下拉框数(1到20之间)的前一个表单。我将为您节省所有查询代码,以创建填充我的下拉列表的数组,直接进入表单验证脚本,然后是表单本身。

来自头部的验证脚本没有<script>标记:

function validateForm()
{
    var count = <?php echo $_SESSION['credits']; ?>;
    var i = 1;

    for (i = 1; i <= count; i++)
    {
        var j = i;
        for (j++; j <= count; j++)
        {
            var a = document.forms["addcredits"]["creditdropdown_"+i].value;
            var b = document.forms["addcredits"]["creditdropdown_"+j].value;
            if ((a == b) && (a != 0))
            {
                alert('Cannot select the same writer more than once.');
                return false;
            }           
        }
    } 

    var foundOne = false;
    var h = 1;

    while (h <= count && !foundOne)
    {
        if (document.forms["addcredits"]["creditdropdown_"+h].value != 0)
        {
            foundOne = true;
        }
        h++;
    }
    if (!foundOne)
    {
        alert('You must select at least one writer to credit.');
        return false;
    }
}

表单代码:

<form id="addcredits" class="appintro" method="post" action="recordcheck.php" onsubmit="return validateForm()">
<div class="form_description">
    <h2>Song Title Submission</h2>
    <p>Step 2: Select writing credits for song title</p>
</div>
<ul>
    <?php 
        for ($i = 1; $i <= $_SESSION['credits']; $i++)
        { ?>
    <li id="li_<?php echo $i; ?>">
        <label class="description" for="creditdropdown_<?php echo $i; ?>">Song Credit #<?php echo $i; ?>:</label>
        <select "creditdropdown_<?php echo $i; ?>">
            <option value="0">Select a writer</option>
            <?php foreach ($writers as $key => $writer) { ?>
                <option value="<?php echo $key; ?>"><?php echo $writer; ?></option>
            <?php } ?>
        </select>
        <p class="guidelines" id="guidelines_<?php echo $i; ?>">Writer not found in database? Add them <a href="" target="_blank">here</a>.</p>
    </li>
    <?php } ?>
    <li id="buttons">
        <input type="hidden" name="form_id" value="2">
        <input type="hidden" name="submit" value="1">
        <input id="nextButton" class="button_text" type="submit" name="submit" value="Next">
    </li>
</ul>
</form>

单击“下一步”时,如果我将随机调试警报窗口粘贴到验证脚本中,则不会弹出任何警报窗口,我能够显示的唯一警报窗口是我在开始时停留的那些窗口代码。我让它们工作的最远的是a之后的第一个任务,甚至调试器都没有显示。我假设我在作业中做错了什么或者下拉列表中的值有问题?不管怎样,我很难过。

1 个答案:

答案 0 :(得分:0)

我说问题出现在你的HTML中:

<select "creditdropdown_<?php echo $i; ?>"> 

您可能正在指定name属性,但您忘记了name=部分。试试这个:

<select name="creditdropdown_<?php echo $i; ?>">

当您到达此行时,在验证功能中:

var a = document.forms["addcredits"]["creditdropdown_"+i].value;

您会发现错误,因为document.forms["addcredits"]["creditdropdown_"+i]undefined,因为html中缺少name=undefined无法.value } property。

(顺便说一句,使用alert()进行调试非常有用非常,但你最好还是使用Chrome中的内置开发者工具 - 只需点击(我认为)ctrl -shift -J获取JS控制台 - 或者下载FireBug for Firefox。或者使用IE的开发人员工具栏。使用console.log()代替alert(),和/或逐步执行代码直到找到问题。)