[英]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.