我正在努力整合一组多页表单,这些表单由会话链接,并在每个部分提交时使用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
之后的第一个任务,甚至调试器都没有显示。我假设我在作业中做错了什么或者下拉列表中的值有问题?不管怎样,我很难过。
答案 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()
,和/或逐步执行代码直到找到问题。)