2011-03-06 22 views
0

忍受我 - 这可能有点混乱!Javascript添加元素以形成功能不工作?

我有一个JavaScript添加(或删除)一个新的textarea +隐藏字段(表示递增)到一个窗体时按下按钮。下面的代码:

function addRowToTable() 
{ 

    var tbl = document.getElementById('convention'); 
    var lastRow = tbl.rows.length; 
    // if there's no header row in the table, then iteration = lastRow + 1 
    var iteration = lastRow; 
    var row = tbl.insertRow(lastRow); 



    // right cell 
    var cellRight = row.insertCell(0); 

    var el = document.createElement('textarea'); 
    el.rows = '2'; 
    el.cols = '80'; 
    el.name = 'conventionSkill' + iteration; 
    el.size = 40; 

    var el2 = document.createElement('input'); 
     el2.value = iteration; 
    el2.type = 'hidden'; 
    el2.name = 'conventioni'; 



    el.onkeypress = keyPressTest; 
    cellRight.appendChild(el); 
    cellRight.appendChild(el2); 


} 

function removeRowFromTable() 
{ 
    var tbl = document.getElementById('convention'); 
    var lastRow = tbl.rows.length; 
    if (lastRow > 2) tbl.deleteRow(lastRow - 1); 
} 

这是附加到其正在通过下面的代码提交表单:

//Convention 




echo "<form action='index.php?viewrubric=".$_GET['viewrubric']."&class=".$_GET['class']."' method='POST'>"; 
echo "<input type='hidden' name='rubricid' value='".$id."' />"; 
$sql2 = "select * from rubrics_convention where rubricid = '$id'"; 
$result2 = mysql_query($sql2) or die (mysql_error()); 

?> 
<h3>Habit of Convention</h3> 
<table> 
<tr><td> 
<label>Habit Description: </td></tr></label></table><textarea name='conventionDescription' rows='2' cols='80'><? echo $description; ?></textarea><br /> 

<table id="convention"> 
<tr><td><label>Skill Descriptions: </label> 
</td></tr> 

<? 
while($row2=mysql_fetch_array($result2)) { 
$convention_i++; 
echo "<tr><td><textarea ".$readonly." name='convention_".$row2['id']."' rows='2' cols='80'>".$row2['skill']."</textarea></td></tr>"; 
} 
echo "<input type='hidden' value=".$convention_i." name='conventioni' />"; 


echo "</table>"; 
echo '<input type="button" value="Add" onClick="addRowToTable();" /> 
<input type="button" value="Remove" onClick="removeRowFromTable();" /> 
'; 

从本质上讲,这是检查什么已经提交数据库(rubrics_convention)。它用什么在那里填充textareas。现在,我希望用户可以点击Add按钮并添加一个新的textarea。现在脚本是这样做的,但是当我提交时,它甚至不承认convention_i的新价值或新技能。

处理形式:

if(isset($_POST['update'])) { 
//Convention 

echo $_POST['conventioni']; 
} 

1.4.3 3,而不是如图4所示,甚至通过JavaScript添加新的形式元素之后。

当我做“视图选择源”在Firefox中点击“添加”按钮后,这里的输出:

<input value="3" name="conventioni" type="hidden" /> 

    <table id="convention"> 
    <tbody> 
     <tr> 
     <td><label>Skill Descriptions:</label></td> 
     </tr> 

     <tr> 
     <td> 
     <textarea name="convention_1" rows="2" cols="80"> 
habit 1 
</textarea></td> 
     </tr> 

     <tr> 
     <td> 
     <textarea name="convention_2" rows="2" cols="80"> 
habit 2 
</textarea></td> 
     </tr> 

     <tr> 
     <td> 
     <textarea name="convention_3" rows="2" cols="80"> 
testest 
</textarea></td> 
     </tr> 

     <tr> 
     <td> 
     <textarea name="conventionSkill4" cols="80" rows="2"> 
</textarea><input name="conventioni" value="4" type="hidden" /></td> 
     </tr> 
    </tbody> 
    </table> 


    <input value="Add" onclick="addRowToTable();" type="button" /> <input value="Remove" 
    onclick="removeRowFromTable();" type="button" /> 

在此基础上输出,你可以清楚地看到它看到新conventioni值(最初是3,javascript插入了一个值为4的新值)。然而,在提交表单时,它完全忽略了这个新值,而是看着3。它甚至不承认conventionskill4在那里。

任何想法?谢谢!

+0

您没有发布处理表单的php代码,所以我们无法帮助您。但是如果我不得不猜测,它不会寻找conventionSkill4,因为你没有添加代码来寻找它。 – 2011-03-06 22:20:50

+0

我正在测试处理表单的唯一代码是如果更新按钮被按下(这是朝向表单的结尾),并且我使用它回显$ _POST ['conventioni']。这样做是回声3而不是4,这是我面临的问题。我已更新了我的原始帖子。 – 2011-03-06 22:22:42

+0

好吧,你仍然需要发布你正在使用的代码,以便我们看到你错在哪里。我的意思是,我可以假设*通过“conventioni”你真的意思是“约定”。$ i和$ i是一个计数器,然后我可以*假设* $ i是一个计数器变量,用于for(..)循环,你只有计数到3,而不是4,但这只是做假设,因为你没有发布代码。 – 2011-03-06 22:25:20

回答

1

在我看来,如果你正在创建一个“conventioni”<input>每次添加一行时,而不是简单更新已存在的输入值。结果将是你的服务器会得到多个名为“conventioni”的参数。

+0

感谢您的回复。我改变了JavaScript以添加一个名为conventioni_alt的新隐藏输入字段。下面是输出结果: 但是,在提交表单后尝试回显$ _POST ['conventioni_alt']时,仍然无法识别提交。 – 2011-03-06 22:46:54

+0

那么你应该使用类似[TamperData](https://addons.mozilla.org/en-us/firefox/addon/tamper-data/)Firefox插件来检查传出HTTP请求的外观。如果参数在那里正确设置,那么你知道你的问题在服务器上。 – Pointy 2011-03-06 23:32:40

+0

我刚刚尝试使用TamperData,它甚至没有看到添加的javascript输入字段。这意味着什么? – 2011-03-06 23:49:19

0

通过查看最终来源,您有两个名称为'conventioni'的输入。

<input value="3" name="conventioni" type="hidden" /> 

上线一个

<input name="conventioni" value="4" type="hidden" /> 

再往下的脚本。

当引用'conventioni'元素时,它最有可能获得第一个元素的值。尝试删除第一个元素,或者只是更新它?

我不能确切地说什么代码将是100%正确的,但一些人这样做的效果可能会指向你在正确的方向:

element = document.getElementById('conventioni'); 
element.value = new_value; 
+0

感谢您的回复。我刚刚回应了另一个基本上说过同样事情的建议。由于我不太确定更新代码是什么,我只是改变了JavaScript来添加一个名为conventioni_alt的字段,但它仍然没有检测到它。 – 2011-03-06 22:48:07