我正在写一个小流星应用程序。表单中有一个文本区域,如下所示:
<form name="comments-form">
<label for="textarea">Comment:</label><br>
<textarea cols="40" rows="10" name="comment_textarea" class="comment_textarea">Write your comment here.</textarea><br>
<button class="btn btn-success js-add-comment">add comment</button>
</form>
在我的
client.js
中,我有以下代码用于访问textarea的值:EVENT_HANDLED = false;
Template.website_item_details.events({
"click .js-add-comment": function(event) {
var comment_text = event.target.comment_textarea.value;
if(Meteor.user()) {
Comments.insert({
created_by: Meteor.user()._id,
text: comment_text,
website_id: this._id
});
}
return EVENT_HANDLED;
}
});
但是,当我单击按钮添加评论时,将获得以下控制台输出:
TypeError: event.target.comment_textarea is undefined
["click .js-add-comment"]()
client.js:103
Template.prototype.events/eventMap2[k]</</<()
blaze.js:3697
Template._withTemplateInstanceFunc()
blaze.js:3671
Template.prototype.events/eventMap2[k]</<()
blaze.js:3696
attached_eventMaps/</</</<()
blaze.js:2557
Blaze._withCurrentView()
blaze.js:2211
attached_eventMaps/</</<()
blaze.js:2556
HandlerRec/this.delegatedHandler</<()
blaze.js:833
jQuery.event.dispatch()
jquery.js:4690
jQuery.event.add/elemData.handle()
这似乎是基本的表单处理,但是不知何故我无法将textarea中的文本转换为我的javascript代码中的变量。我已经尝试了多种访问它的方法:
document.getElementsByClass()[0].value
$('.comment_textarea').get(0).val() // there should only be one such text area anyway
event.target.comment_textarea.value;
但是这些都不对我有用,我总是会遇到这个错误。几乎就像textarea不是我的
html
的一部分,或者Meteor中有一个bug,这使我无法访问textareas。我还检查了是否还有其他名称为
comment_textarea
的东西,可以对我所有项目的客户端文件进行全文搜索,但是没有其他东西。我只是盲目而忽略了什么吗?我如何获得该文本?
更重要的是,尽管我返回了
false
,但浏览器仍会重新加载页面。可能与之前发生的错误有关吗? 最佳答案
您正在使用按钮的click
事件,并且在该事件上,textarea
不可用。您需要将事件更改为submit form
。首先,将ID放入表单中,将按钮更改为submit
类型,然后将代码更改为
"submit #your-form-id": function(event) {
event.preventDefault();
var comment_text = event.target.comment_textarea.value;
.....
}