如何创建一个包含每个帖子的帖子和回复的论坛

时间:2016-06-06 09:29:29

标签: javascript html forms dom

我有一个用户论坛页面'帖子。我需要创建一个回复文本区域,用户可以在其中回复任何帖子。问题是每当回复帖子时,我的JS脚本都无法检测到回复所属的特定帖子。

以下是生成帖子列表并创建回复表单的php片段。



echo'
<div id="div'.$post_id.'"></div>
<form name="form'.$post_id.'">'; echo'
  <div class="row">
    <div class="col-sm-1">
      <img src="" width="70" height="70" class="img img-responsive" alt="Your profile picture.">
    </div>
    <div class="col-sm-4">
      <textarea placeholder="Your reply" name="user_reply" class="form-control" maxlength="250" rows="3" required></textarea>
      <input type="hidden" name="user_id" value="'.$userId .'">
      <input type="hidden" name="time" value="'.$time .'">
      <input type="hidden" name="date" value="'.$date .'">
    </div>
    <div class="col-sm-1">
      <button name="data" type="button" onclick="sendReply(\' '.$post_id.' \');">Reply</button>

    </div>
  </div>
</form>
</div>';
&#13;
&#13;
&#13;

现在这里是JS脚本,我认为应该选择用户的回复并将值发送到reply.php文件

&#13;
&#13;
<script>
	function sendReply(id){
		x='document.form'+id;
		post_id = id;
		user_id = x.user_id.value;
		reply = x.user_reply.value;
		date = x.date.value;
		time = x.time.value;
		if(window.XMLHttpRequest){
			xmlhttp = new XMLHttpRequest();
		}else{
			xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		}
		
		xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
				document.getElementById("div"+id).innerHTML = xmlhttp.responseText;
			}
		}
		xmlhttp.open('GET', 'reply.php?reply='+reply+'&post_id='+post_id+'&user_id='+user_id+'&time='+time+'&date='+date, true);
		xmlhttp.send();

	}
</script>
&#13;
&#13;
&#13;

最后,这是我点击回复按钮时在浏览器控制台中收到的错误

&#13;
&#13;
(index):121 Uncaught TypeError: Cannot read property 'value' of undefinedsendReply
@ (index):121onclick 
@ VM161:211
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

这部分是问题所在:

x='document.form'+id;
post_id = id;
user_id = x.user_id.value;

在这里,您要创建一个包含字符串的变量x,然后尝试访问它,就像它是一个对象一样。

相反,试试这个:

x = document['form' + id]