AngularJS中如何将输入框的输入值传入submit函数?
解决:将输入框实际输入值传入AngularJS的ng-keypress函数
你的问题出在当前的ng-keypress="submit(key)"调用里——这里的key是输入框的初始静态值(也就是"key"),根本不是用户实际按下的按键数值,所以函数里拿到的自然不是你想要的内容。下面给你最简单的实现方式:
方法:通过$event获取按键对应的数值
AngularJS的ng-keypress支持直接传递事件对象$event,我们可以通过这个对象提取用户按下的按键字符,再转成数字使用。
第一步:修改HTML代码
把原来的key参数换成$event:
<input type="text" value="key" ng-keypress="submit($event)" ng-model="pager.page"/>
第二步:更新控制器的submit函数
在函数里从事件对象中提取按键值,同时增加非数字输入的过滤:
$scope.submit = function (event) { // 将按键的ASCII码转成对应的字符,再转为整数 const inputNum = parseInt(String.fromCharCode(event.which), 10); // 过滤非数字按键,避免无效输入触发逻辑 if (isNaN(inputNum)) return; // 这里用提取到的输入数字替换原来的val参数 const newPage = parseInt($scope.pager.page, 10) + inputNum; if (!$scope.pager.initialized || newPage > $scope.pager.totalPages) { return; } $scope.pager.page = newPage; $scope.loading = true; $http({ url: 'custom/generate', method: 'POST', data: $.param({ filters: $scope.filters, page: $scope.pager.page }), headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).success(function (data) { $scope.data.data = data.meetings; $scope.pager.page = data.pager.page; $scope.pager.totalPages = data.pager.totalPages; // 简化判断逻辑 $scope.printable = $scope.data.data.length > 0; }).error(function() { $scope.loading = false; $rootScope.$broadcast('ErrorOnResponse', {error: 'An unknown error occurred'}); }); };
额外说明
如果你的需求是直接获取输入框的当前完整值(而不是单次按键的数字),那更简单——因为ng-model="pager.page"已经做了双向绑定,你可以直接在函数里使用$scope.pager.page,此时HTML可以改成ng-keypress="submit()",函数里去掉事件参数直接用绑定的值即可。不过从你的原有逻辑来看,你是想把按下的数字加到当前页码上,所以上面的方法更贴合你的需求。
内容的提问来源于stack exchange,提问作者john doe
相关产品推荐
相关产品推荐

