我有以下脚本:
<script type="text/javascript" >
$('form').each(function() {
$(this).on('submit', function() {
var first_firstname = $(".first_firstname", this).val();
var first_lastname = $(".first_lastname", this).val();
var second_firstname = $(".second_firstname", this).val();
var second_lastname = $(".second_lastname", this).val();
var TeamName = $(".TeamName", this).val();
var dataString = 'first_firstname='+ first_firstname + '&first_lastname=' + first_lastname +
'&second_firstname=' + second_firstname + '&second_lastname=' + second_lastname + '&TeamName=' + TeamName;
$.ajax({
type: "POST",
url: "data.php",
data: dataString,
success: function(){
window.setTimeout(function(data)
{
$('#propspectDiv').html('Team Name Added!');
$('#data').css("display","block");
$('#data').html(data);
}, 2000);
}
});
return false;
});
</script>
以下php使用mysql数据库在页面上生成多个表单
<?php
echo '<table class="greensmalltbl" cellspacing="10px" cellpadding="5px"><div id="propspectDiv"></div>';
for ($i=1, $o=$totalEntrants; $i<=$half; $i++, $o=$o-1) {
$formid = $i;
echo "<div style='border:3px;'><form action='' method='post'>
<tr><td><input type='text' name='first_firstname' id='first_firstname' value='$firstName[$i]' />
<input type='text' name='first_lastname' id='first_lastname' value='$lastName[$i]' />
Skill Level : ".$skill[$i]."</td></tr>";
echo "<tr><td>WITH</td></tr>";
echo "<tr><td><input type='text' name='second_firstname' id='second_firstname' value='$firstName[$o]' />
<input type='text' name='second_lastname' id='second_lastname' value='$lastName[$o]' /> Skill Level ".$skill[$o]."</td></tr>";
echo "<tr><td>Enter Team Name : <input type='text' name='TeamName' id='TeamName' value='' />
<input type='submit' name='submit' value='Submit'></form></td></tr>";
}
echo '</table>';
&GT;
我想用每种形式的TEAM NAME更新db表
问题是只有第一个表单输入传递所有其他表单什么都不做 我已经尝试了ajax代码的许多变体,但没有一个有效。 谁能在这里找到问题
答案 0 :(得分:0)
此行不会返回表单。
var parent = $(this).parent('form');
因为您的提交按钮包含在tr
和td
标记内。要么摆脱这些标签(无论如何它们都是invallid,因为你没有在table
中使用它们),或者将你的代码更新为:
var parent = $(this).closest('form');
closest()
搜索元素的所有祖先,并返回选择器的第一个匹配项。
在这里查看文档:{{3}}
或者,如果您的页面中只有一个表单,那么您可以去:
var parent = $('form');
::编辑::
行。忘记以上所有内容。好像你甚至没有在代码中使用父变量。 更重要的一个问题是,即使您在表单提交按钮上捕获Click事件,您可能真正想要做的是捕获表单的提交事件。
所以将第一行代码更改为:
$('form').on('submit', function() {
此外,在您的HTML中,您的代码无效。
<form action'' method='post' id='$formid'>
action''
应为action = ''
这可能无法解决您的问题,因为可能会有更多错误。下次,在发布问题之前尝试验证您的代码。
::编辑::
最后编辑,我保证。我很快再次通过你的代码,似乎你会有多种形式。这意味着,您将获得具有相同ID的不同形式的元素。对于整个页面,id应该是唯一的。因此,当您尝试获取此$("#second_firstname").val();
之类的值时,这将无法正常工作。因为jQuery不知道你的意思是什么元素,所以在页面中多次出现的所有元素都需要有一个类而且不能有id。
然后,您可以通过将内容更改为:
来循环播放表单$('form').each(function() {
$(this).on('submit', function() {
var first_firstname = $(".first_firstname", this).val(); // . instead of # and use 'this' as context
// and so on..
// the rest of your code here.
}
});