【发布时间】:2014-05-01 15:21:29
【问题描述】:
我正在尝试在单击按钮后将一些文本添加到最后一个光标位置。
在控制器中:
$scope.addEmoji = function(name){
var element = $("#chat-msg-input-field");
element.focus(); //ie
var selection = element.getSelection();
var textBefore = $scope.chatMsg.substr(0, selection.start);
var textAfter = $scope.chatMsg.substr(selection.end);
$scope.chatMsg = textBefore + name + textAfter;
}
$scope.updateChatMsg = function(chatMsg){
$scope.chatMsg = chatMsg;
}
$scope.sendChatMsg = function(){
var backend = $scope.convs[$scope.active.conv].backend.name;
$scope.view.addChatMsg($scope.active.conv, $scope.active.user, $scope.chatMsg,new Date().getTime() / 1000, backend);
Chat[backend].on.sendChatMsg($scope.active.conv, $scope.chatMsg);
$scope.chatMsg = '';
};
然后是一些 HTML:
<div class="chat-msg-button" >
<button ng-click="view.toggle('emojiContainer')" ><img src="/apps/chat/img/emoji/smile.png"></button>
</div>
<form id="chat-msg-form" ng-submit="sendChatMsg()">
<div class="chat-msg-button" >
<button type="submit"><div class="icon-play"> </div></button>
</div>
<div id="chat-msg-input">
<textarea id="chat-msg-input-field" autocomplete="off" type="text" ng-model="chatMsg" ng-change="updateChatMsg(chatMsg)" placeholder="Chat message"></textarea>
<div>{{ chatMsg }}</div>
</div>
</form>
我想要实现的目标:用户在 textarea 中键入一些文本 => $scope.chatMsg 获取 textarea 的值。现在用户按下按钮之一 => 按钮的名称被添加到最新的光标位置。 (找到最新的光标位置是没有问题的)
问题
div里面$scope.chatMsg、{{ chatMsg }}的值和textarea里面的文字是有区别的。
textarea 和 div 的内容始终保持不变。但是当按下按钮时,名称被添加到$scope.chatMsg,但 textarea 的内容没有改变......
我该如何解决这个问题? TIA
【问题讨论】:
-
你能把 jsfiddle 或 plunker 放在一起吗?
-
plnkr.co/edit/lN7FulBZullRV0TG5y7T?p=preview 即使没有 ng-change,它也能完美运行。我想我必须剥离我的代码....
-
您的按钮中包含一个 div,并且并不总是在点击时触发
-
查看我的回答的更新