尝试使用 ng-keypress 跟踪文本区域的行
Attempting to track row of textarea with ng-keypress
*注意,换行对我来说无关紧要,我需要基于换行字符数的行号,因为我以后要拆分 vm.text 并像访问它一样一个数组。
我想知道每次按下回车键时我在文本区域的哪一行。我遵循了这里的答案:
Find out the 'line' (row) number of the cursor in a textarea
我尝试将它与 ng-keypress 合并,如下所示:
enmasse.html
<form role="form" ng-submit="vm.submit()">
<div class="form-group">
<h2 layout="column" layout-align="center center">Multi-Event Creation</h2>
<br>
<div>Input Formats</div>
<!-- display input 'rulebook' here -->
<br>
<md-input-container>
<label style="color:#545454">Enter your events/tasks, line by line</label>
<textarea cols="50" ng-keypress="vm.check(this, $event.keyCode)" ng-model="vm.text" required></textarea>
</md-input-container>
<div class="form-group" layout="column" layout-align="center center">
<md-button class="md-raised md-primary btn-submit" type="submit">Submit</md-button>
</div>
</div>
请注意,我正在使用 ngDialog 将我的控制器连接到我的表单。
enmasse-controller.js
(function () {
'use strict';
angular
.module('app.enmasse.controllers')
.controller('EnmasseController', EnmasseController);
EnmasseController.$inject = ['$rootScope', '$scope', 'Authentication', 'Snackbar', 'Posts', 'Access'];
function EnmasseController($rootScope, $scope, Authentication, Snackbar, Posts, Access) {
var vm = this;
vm.submit = submit;
vm.check = check;
vm.lineNumber;
function check(textarea, keyCode) {
//console.log(keyCode); *works
// trouble in this section
if (keyCode == 13) {
vm.lineNumber = textarea.value.substr(0, textarea.selectionStart).split("\n").length;
console.log(vm.lineNumber);
}
//
//if (keyCode==13) {
//console.log(vm.text); *works for pulling all text in textarea, but need to pull the previous line!
//validate();
//}
}
function submit() { //called when all the lines are validated and user clicks submit
}
}
})();
浏览器控制台向我抛出以下错误 --> TypeError: Cannot read 属性 'substr' of undefined
我该如何解决这个问题?
那是因为 angular 表达式中的 this
不是 DOM 节点。
您可以改为传递事件:
<textarea cols="50" ng-keypress="vm.check($event, $event.keyCode)" ng-model="vm.text" required></textarea>
并将textarea设置为事件的目标:
function check(event, keyCode) {
var textarea = event.target;
...
}
*注意,换行对我来说无关紧要,我需要基于换行字符数的行号,因为我以后要拆分 vm.text 并像访问它一样一个数组。
我想知道每次按下回车键时我在文本区域的哪一行。我遵循了这里的答案: Find out the 'line' (row) number of the cursor in a textarea
我尝试将它与 ng-keypress 合并,如下所示:
enmasse.html
<form role="form" ng-submit="vm.submit()">
<div class="form-group">
<h2 layout="column" layout-align="center center">Multi-Event Creation</h2>
<br>
<div>Input Formats</div>
<!-- display input 'rulebook' here -->
<br>
<md-input-container>
<label style="color:#545454">Enter your events/tasks, line by line</label>
<textarea cols="50" ng-keypress="vm.check(this, $event.keyCode)" ng-model="vm.text" required></textarea>
</md-input-container>
<div class="form-group" layout="column" layout-align="center center">
<md-button class="md-raised md-primary btn-submit" type="submit">Submit</md-button>
</div>
</div>
请注意,我正在使用 ngDialog 将我的控制器连接到我的表单。
enmasse-controller.js
(function () {
'use strict';
angular
.module('app.enmasse.controllers')
.controller('EnmasseController', EnmasseController);
EnmasseController.$inject = ['$rootScope', '$scope', 'Authentication', 'Snackbar', 'Posts', 'Access'];
function EnmasseController($rootScope, $scope, Authentication, Snackbar, Posts, Access) {
var vm = this;
vm.submit = submit;
vm.check = check;
vm.lineNumber;
function check(textarea, keyCode) {
//console.log(keyCode); *works
// trouble in this section
if (keyCode == 13) {
vm.lineNumber = textarea.value.substr(0, textarea.selectionStart).split("\n").length;
console.log(vm.lineNumber);
}
//
//if (keyCode==13) {
//console.log(vm.text); *works for pulling all text in textarea, but need to pull the previous line!
//validate();
//}
}
function submit() { //called when all the lines are validated and user clicks submit
}
}
})();
浏览器控制台向我抛出以下错误 --> TypeError: Cannot read 属性 'substr' of undefined
我该如何解决这个问题?
那是因为 angular 表达式中的 this
不是 DOM 节点。
您可以改为传递事件:
<textarea cols="50" ng-keypress="vm.check($event, $event.keyCode)" ng-model="vm.text" required></textarea>
并将textarea设置为事件的目标:
function check(event, keyCode) {
var textarea = event.target;
...
}