Meteor App以形式获得textarea的价值

时间:2015-12-21 23:44:03

标签: javascript forms meteor text textarea

我正在写一个小流星应用程序。表格中有一个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,但浏览器仍会重新加载页面。它可能与之前发生的错误有关吗?

2 个答案:

答案 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,这就是网站重新加载的原因。