Meteor App在表单中获取textarea的值
Meteor App get value of textarea in form
我正在编写一个小的 Meteor 应用程序。表单中有一个textarea,看起来像这样:
<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
中,我有以下用于访问文本区域值的代码:
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()
这似乎是基本的表单处理,但不知何故我无法将文本区域中的文本放入我的 javascript 代码中的变量中。我已经尝试过多种访问方式:
document.getElementsByClass()[0].value
$('.comment_textarea').get(0).val() // there should only be one such text area anyway
event.target.comment_textarea.value;
但是 none 这些对我有用,我总是得到那个错误。这几乎就像文本区域不是我的一部分 html
或者 Meteor 中有一个错误,阻止我访问文本区域。
我还检查了是否还有其他名为 comment_textarea
的东西,对我所有的项目客户端文件进行了全文搜索,但没有其他东西。
我是不是瞎了眼,忽略了什么?我如何获得该文本?
更重要的是,尽管我return false
,浏览器仍然重新加载页面。会不会和之前发生的错误有关?
在尝试了更绝望的方法来访问该文本区域之后,我想我现在知道出了什么问题:
// var comment_text = event.target.comment_textarea.value;
// var comment_text = document.getElementByName('comment_textarea').value;
// var comment_text = document.getElementByTagName('textarea')[0].value;
// var comment_text = $('textarea').get(0).val();
// var comment_text = $('textarea').get(0).text();
var comment_text = $('textarea').get(0).value; // finally working!
所以好像我用jQuery的时候不能用.val()
这个功能,正如我在其他很多问题的回答里说的那样,但是出于某种原因我不得不对待它像一个普通的 DOM 对象并使用属性 value
而不是函数 .val()
.
也许它特定于我的 Meteor 应用程序中的 jQuery 版本?
所以我将测试以下内容:
var comment_text = $('textarea.comment_textarea').get(0).value;
...
是的,这也有效。
它还修复了重新加载问题。我想因为有错误,它甚至没有达到 return false,这就是网站重新加载的原因。
您正在使用按钮的 click
事件,在该事件中,textarea
不可用。您需要将事件更改为 submit form
。首先,将 id 放入您的表单中,将按钮更改为类型 submit
并将代码更改为
"submit #your-form-id": function(event) {
event.preventDefault();
var comment_text = event.target.comment_textarea.value;
.....
}
我正在编写一个小的 Meteor 应用程序。表单中有一个textarea,看起来像这样:
<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
中,我有以下用于访问文本区域值的代码:
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()
这似乎是基本的表单处理,但不知何故我无法将文本区域中的文本放入我的 javascript 代码中的变量中。我已经尝试过多种访问方式:
document.getElementsByClass()[0].value
$('.comment_textarea').get(0).val() // there should only be one such text area anyway
event.target.comment_textarea.value;
但是 none 这些对我有用,我总是得到那个错误。这几乎就像文本区域不是我的一部分 html
或者 Meteor 中有一个错误,阻止我访问文本区域。
我还检查了是否还有其他名为 comment_textarea
的东西,对我所有的项目客户端文件进行了全文搜索,但没有其他东西。
我是不是瞎了眼,忽略了什么?我如何获得该文本?
更重要的是,尽管我return false
,浏览器仍然重新加载页面。会不会和之前发生的错误有关?
在尝试了更绝望的方法来访问该文本区域之后,我想我现在知道出了什么问题:
// var comment_text = event.target.comment_textarea.value;
// var comment_text = document.getElementByName('comment_textarea').value;
// var comment_text = document.getElementByTagName('textarea')[0].value;
// var comment_text = $('textarea').get(0).val();
// var comment_text = $('textarea').get(0).text();
var comment_text = $('textarea').get(0).value; // finally working!
所以好像我用jQuery的时候不能用.val()
这个功能,正如我在其他很多问题的回答里说的那样,但是出于某种原因我不得不对待它像一个普通的 DOM 对象并使用属性 value
而不是函数 .val()
.
也许它特定于我的 Meteor 应用程序中的 jQuery 版本?
所以我将测试以下内容:
var comment_text = $('textarea.comment_textarea').get(0).value;
... 是的,这也有效。 它还修复了重新加载问题。我想因为有错误,它甚至没有达到 return false,这就是网站重新加载的原因。
您正在使用按钮的 click
事件,在该事件中,textarea
不可用。您需要将事件更改为 submit form
。首先,将 id 放入您的表单中,将按钮更改为类型 submit
并将代码更改为
"submit #your-form-id": function(event) {
event.preventDefault();
var comment_text = event.target.comment_textarea.value;
.....
}