我正在写一个小流星应用程序。表格中有一个textarea,如下所示:
$('button').click(function() {
var newSrc = $("button")[0].getAttribute("href");
$(".loading-picture-gif").show();
$("#demo img").on("load", function() {
$(".loading-picture-gif").hide();
}).attr("src", newSrc);
});
在我的<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>
中,我有以下代码来访问textarea的值:
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;
}
});
这似乎是基本的表单处理,但不知何故,我无法将textarea中的文本转换为我的javascript代码中的变量。我已经尝试了多种访问方式:
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不是我的document.getElementsByClass()[0].value
$('.comment_textarea').get(0).val() // there should only be one such text area anyway
event.target.comment_textarea.value;
的一部分,或者Meteor中有一个错误,这使我无法访问textareas。
我还检查了是否有其他名为html
的内容,我的所有项目客户端文件都进行了全文搜索,但是没有其他内容。
我只是盲目地俯视某些东西?我如何获得该文本?
更重要的是,虽然我返回comment_textarea
,但浏览器仍会重新加载页面。它可能与之前发生的错误有关吗?
答案 0 :(得分:2)
您正在使用该按钮的click
事件,并且在该事件中,textarea
不可用。您需要将事件更改为submit form
。首先,将id放入表单中,将按钮更改为submit
类型并将代码更改为
"submit #your-form-id": function(event) {
event.preventDefault();
var comment_text = event.target.comment_textarea.value;
.....
}
答案 1 :(得分:1)
在尝试更加绝望的方式访问该textarea后,我想我现在知道错误了:
// 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;
... 是的,这也有效。 它还修复了重载问题。我想因为有一个错误,它甚至没有返回false,这就是网站重新加载的原因。