我一直试图找到一种方法让我的jQuery AJAX脚本找出我发布的表单的值,但我不确定我做错了什么。我可能错过了一些基本知识。
总之。到目前为止这是我的jQuery:
function updaterow(sub){
var form = sub.form;
var ID = $(form).find('input[name="ID"]').val();
var ArtName = $(form).find('input[name="ArtName"]').val();
var ArtNumber = $(form).find('input[name="ArtNumber"]').val();
var CustContact = $(form).find('input[name="CustContact"]').val();
var SupStatus = $(form).find('select[name="SupStatus"]').val();
var SupName = $(form).find('select[name="SupName"]').val();
var OrderOther = $(form).find('textarea[name="OrderOther"]').val();
var dataString = 'ID=' + ID + '&ArtName=' + ArtName + '&ArtNumber=' + ArtNumber + '&CustContact=' + CustContact + '&SupStatus=' + SupStatus + '&SupName=' + SupName + '&OrderOther=' + OrderOther;
alert(sub.form);
alert(dataString);
return false;
}
编辑:这会在Firefox中返回未定义的每个变量。它在IE 9中似乎是正确的。
这是我的HTML(PHP),它也更新为包含更多输入字段:
while ($row = mysql_fetch_array($query)) {
echo "<tr><form id='".$row['ID']."' class='fcform'>
<td class='idcell'><input type='text' class='fcid' name='ID' readonly='readonly' value='".$row['ID']."' /></td>
<td><input type='text' name='ArtName' value=' ".$row['ArtName']."' /></td>
<td><input type='text' name='ArtNumber' value='".$row['ArtNumber']."' /></td>
<td><a href='/singlepost.php?ID=".$row['ID']."' title='Skriv ut ".$row['CustName']."'>".$row['CustName']."</a></td>
<td><input type='text' name='CustContact' value='".$row['CustContact']."' /></td>
<td>
<select name='SupStatus' class='fcsupstatus'>
<option value='".$row['SupStatus']."'>".$row['SupRealStatus']."</option>
<option value='01'>Mottagen</option>
<option value='02'>Lagd i korg</option>
<option value='03'>Beställd</option>
<option value='04'>Ankommen</option>
<option value='05'>Slutförd</option>
<option value='06'>Nekad</option>
</select>
<td>
<select>
<option value='".$row['SupName']."'>".$row['SupRealName']."</option>
<option value='01'>2020</option>
<option value='02'>Order</option>
<option value='03'>Brightpoint</option>
<option>---------</option>
<option value='04'>12 Volt</option>
<option value='05'>Armour</option>
<option value='06'>Brodit</option>
<option value='07'>Captech</option>
<option value='08'>DLS</option>
<option value='09'>Garmin</option>
<option value='10'>GL Batterier</option>
<option value='11'>Ingram</option>
<option value='12'>Isicom</option>
<option value='13'>KGK</option>
<option value='14'>MTU</option>
<option value='15'>Peltor</option>
<option value='16'>Pioneer</option>
<option value='17'>TMT</option>
<option value='18'>Övriga</option>
</select>
</td>
<td>".$row['Date']."</td>
<td>
<textarea name='OrderOther' cols='40' rows='3' class='fcorderother'>".$row['OrderOther']."</textarea>
<input class='savebutton' type='button' value=' ' name='Submit".$row['ID']."' onClick='updaterow(this);' />
</td>
</form></tr>";}
我发布了这篇文章作为另一篇文章,但后来我问为什么我的ajax没有发布。现在已经修复了,但现在出现了变量的问题。只是不明白为什么......
我无法使用ID,因为表单是动态生成的。但似乎jQuery不知道我想发布哪种形式。
我尝试过使用遍历类和名称,但无济于事。
编辑: 链接到文件:
http://bilradiocentrum.se/txt/listheader.txt
答案 0 :(得分:1)
您需要将参数添加到updateRow
功能(第1行)。并且从参数获取表单对象(第2行)。
看看如何完成。
function updaterow(sub){ // (line #1)
var form= sub.form; // (line #2)
var ID = $(form.ID]).val();
var SupStatus = $(form.SupStatus).val();
...
此处form
将成为您的表单,因为您在onClick='updaterow(this);'
元素input
中使用sub
将是输入元素。 sub.form
将是包含input元素的表单。因此形式得到了实际形式。
jquery find语句中存在问题。使用$(form.NAME).val()
,其中NAME是元素名称,例如 ArtName , ID , OrderOther 等。(我已经更新了上面的代码)。
另一个选项是为每个元素使用唯一键作为Id。见下面的例子,
<input id='ArtName-".$row['ID']"' type='text' name='ArtName' value=' ".$row['ArtName']."' />
现在可以通过updaterow()
或$("#ArtName-"+$(form).prop('id'))
轻松地在$("ArtName-"+ID)
函数中获取此行。
只有将更新功能更改为updaterow(sub, ID)
并将提交输入元素更改为
<input class='savebutton' type='button' value=' ' name='Submit".$row['ID']."' onClick='updaterow(this, \"".$row['ID']."\");' />
答案 1 :(得分:1)
一个简单的更改将解决您的问题:
变化:
<input type='button' value='Spara' name='Submit".$row['ID']."' onClick='updaterow(this);' />
要:
<input type='button' value='Spara' name='Submit".$row['ID']."' onClick=updaterow('".$row['ID']."'); />
在你的剧本中:
function updaterow(formid){
var form = document.getElementById(formid); //Why you need this line??
var ID = $("#"+formid).find('input[name="ID"]').val();
var SupStatus = $("#"+formid).find('input[name="SupStatus"]').val();
var OrderOther = $("#"+formid).find('input[name="OrderOther"]').val();
编辑:我在name属性的值中添加了引号。 (更新您的js代码并立即尝试)