iOS cordova应用程序中的Textarea只接受一次输入

时间:2015-02-19 19:35:34

标签: javascript ios cordova textarea

具体来说,在安装应用程序后,可以通过软键盘的输入改变textarea值。这是一个单页应用程序,我使用Handlebars进行模板化。这是模板:

<script id="comment-form-tpl" type="text/template">
        <header class="bar bar-nav">
          <a href="#" class="btn btn-link btn-nav pull-left">
            Cancel
          </a>
          <h1 class="title">Add Comment</h1>
        </header>
        <div class="bar bar-standard bar-footer">
          <button type="button" id="save-comment" class="btn btn-block">Save</button>
        </div>
        <div class="content">
          <form class="input-group">
            <textarea id="comment-text" placeholder="Comment" rows="10" autofocus>{{{comment}}}</textarea> 
          </form>
        </div>
    </script>

我使用附加到“保存”按钮的javascript从textarea获取输入:

var CommentAddView = function() {
var Comment = new Object();

this.initialize = function() {
    this.$el = $('<div/>');
    this.$el.on('click', '#save-comment', this.saveComment);
    if (window.localStorage.getItem("comment")) {
        var text = window.localStorage.getItem("comment");
        text = text.replace(/<br>/g, "\n");
        this.setComment(text);
    }
    this.render();
};

this.render = function() {
    this.$el.html(this.template(Comment));
    return this;
};

this.setComment = function(text) {
    Comment.comment = text;
}; 

this.saveComment = function() {
    var text = $("#comment-text").val();
    text = text.replace(/(\r\n|\r|\n)/g, '<br>');
    window.localStorage.setItem("comment", text);
    router.load('');
};

this.initialize();

};

这一切都完美地完成了一次 - textarea显示了软键盘,我可以输入内容,并保存到本地存储。 但是,编辑不起作用:正如您所看到的,如果本地存储中存在“注释”值,则将其放入文本区域。这有效,但价值无法改变。我可以使用软键盘输入新文本,它将显示在textarea中,但是当我触摸“保存”时,我可以通过登录控制台验证$("#comment-text").val()没有更改。与尝试删除类似:删除从本地存储中删除“注释”的值。如果我尝试输入新评论,textarea会显示为空白,我可以输入新评论,但是当我尝试保存时,$("#comment-text").val()的值是第一个被认为已删除的评论!如果我尝试通过放线来解决这个问题     $("#comment-text").val(""); 然后$("#comment-text").val()确实是空的......但它仍然无法通过键盘输入进行更改。如果我只是在桌面上的Safari中打开应用程序,一切正常;所以这是一个iOS(或可能只是iPhone)的问题。我在iOS 8.1.3上测试。我已经用Google搜索过了,并尝试了一些看起来可能与远程相关的内容,但我没有想法。有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

终于明白了!我将行$("#comment-text").remove();添加到saveComment函数中。所以:

this.saveComment = function() {
    var text = $("#comment-text").val();
    $("#comment-text").remove();
    text = text.replace(/(\r\n|\r|\n)/g, '<br>');
    window.localStorage.setItem("comment", text);
    router.load('');
};

每次显示评论表单时,我都会创建一个新的CommentAddView对象,但我终于意识到jQuery的行为就像上一个仍在那里一样。明确删除它可以解决这个问题。