繁体   English   中英

简单的Java表格验证问题

[英]Problems with simple Javascript form 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之后,甚至没有调试器将显示。 我假设我在分配中做错了什么,或者下拉列表中的值有问题? 无论哪种方式,我都感到困惑。

我会说问题出在您的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 ,因为失踪的name=在HTML和undefined不能有.value财产。

(顺便说一下,调试alert()是有用的偶然,但你好得多使用内置在Chrome开发者工具-刚打(我认为)按Ctrl-Shift-J键来获取JS控制台-或下载适用于Firefox的FireBug。或使用IE的开发人员工具栏。使用console.log()而不是alert() ,和/或逐步执行代码,直到发现问题。)

暂无
暂无

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

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