具体来说,在安装应用程序后,可以通过软键盘的输入改变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搜索过了,并尝试了一些看起来可能与远程相关的内容,但我没有想法。有谁知道这里发生了什么?
答案 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的行为就像上一个仍在那里一样。明确删除它可以解决这个问题。