Javascript 如何通过点击按钮触发功能,该按钮已设置为通过“触发”;输入“;按AngularJS中的键?

Javascript 如何通过点击按钮触发功能,该按钮已设置为通过“触发”;输入“;按AngularJS中的键?,javascript,angularjs,Javascript,Angularjs,因此,我试图通过按ENTER键旁边的按钮将产品添加到购物车中(这是现在将产品添加到购物车中的唯一方法),我尝试了很多次,但不幸的是,所有方法都不起作用。 这是一个用AngularJS构建的POS系统项目(我在这方面的经验非常薄弱),我需要尽快完成它 以下是HTML部分: 增加产品销售 当有人点击“myButton”时,我想我需要在ng click指令中添加一些功能,但欢迎使用任何其他方式 以下是JS部分: // POS Section pos.controller('pos

因此,我试图通过按ENTER键旁边的按钮将产品添加到购物车中(这是现在将产品添加到购物车中的唯一方法),我尝试了很多次,但不幸的是,所有方法都不起作用。 这是一个用AngularJS构建的POS系统项目(我在这方面的经验非常薄弱),我需要尽快完成它 以下是HTML部分:



增加产品销售
当有人点击“myButton”时,我想我需要在ng click指令中添加一些功能,但欢迎使用任何其他方式

以下是JS部分:

        // POS Section
pos.controller('posController', function ($scope, $routeParams, Inventory, Transactions) {

  $scope.barcode = '';

  function barcodeHandler (e) {

      $scope.barcodeNotFoundError = false;

      $scope.barcode = $('#product-entry').val();

      var regex=/^[0-9]+$/;

      // if enter is pressed
      if (e.which === 13) {

        if(!$scope.barcode.match(regex)){
          for(var i = 0; i < $scope.inventory.length; i++) {
            if($scope.inventory[i].name === $scope.barcode) {
              $scope.barcode = $scope.inventory[i].barcode;
              break;
            }
          }
        }

        if ($scope.isValidProduct($scope.barcode)) {
          $scope.addProductToCart($scope.barcode);
          $scope.barcode = '';
          $scope.productsList = '';
          $scope.$digest();
          $('#product-entry').val($scope.barcode);
        }
        else {
          window.alert('product not found: ' + $scope.barcode);
          console.log('invalid product: ' + $scope.barcode);
          // $scope.barcodeNotFoundError = true;
        }
      }
  }

  $('#product-entry').off('keypress').on('keypress', barcodeHandler);
//POS部分
pos.controller('posController',函数($scope,$routeParams,Inventory,Transactions){
$scope.barcode='';
函数barcodeHandler(e){
$scope.barcodeNotFoundError=false;
$scope.barcode=$(“#产品条目”).val();
var regex=/^[0-9]+$/;
//如果按enter键
如果(e.which==13){
if(!$scope.barcode.match(正则表达式)){
对于(变量i=0;i<$scope.inventory.length;i++){
如果($scope.inventory[i].name==$scope.barcode){
$scope.barcode=$scope.inventory[i]。条形码;
打破
}
}
}
if($scope.isValidProduct($scope.barcode)){
$scope.addProductToCart($scope.barcode);
$scope.barcode='';
$scope.productsList='';
$scope.$digest();
$(“#产品条目”).val($scope.barcode);
}
否则{
window.alert('未找到产品:'+$scope.barcode);
console.log('无效产品:'+$scope.barcode);
//$scope.barcodeNotFoundError=true;
}
}
}
$(“#产品输入”).off('keypress').on('keypress',条形码处理器);

您正在侦听字段上的keyup事件,如果该键与返回键匹配,它将继续执行您的逻辑

如果将逻辑移动到其自身的函数中(在barcodeHandler之前),则可以在其他位置访问它:

$scope.doSomething = function() {
  $scope.barcodeNotFoundError = false;
  $scope.barcode = $('#product-entry').val();
  var regex=/^[0-9]+$/;

  if(!$scope.barcode.match(regex)){
    for(var i = 0; i < $scope.inventory.length; i++) {
      if($scope.inventory[i].name === $scope.barcode) {
        $scope.barcode = $scope.inventory[i].barcode;
        break;
      }
    }
  }

  if ($scope.isValidProduct($scope.barcode)) {
    $scope.addProductToCart($scope.barcode);
    $scope.barcode = '';
    $scope.productsList = '';
    $('#product-entry').val($scope.barcode);
  }
  else {
    window.alert('product not found: ' + $scope.barcode);
    console.log('invalid product: ' + $scope.barcode);
    // $scope.barcodeNotFoundError = true;
  }
};
现在,在标记中,您可以执行以下操作:

<button id="myButton" ng-click="doSomething()">Add Product to Sale</button>
将产品添加到销售中

将某些内容添加到控制器的
$scope
是使其在视图中可用的一种方法。

如果它在enter上提交,我假设它在
标记中?如果您将属性
type=“submit”
添加到按钮,它应该在单击时提交表单。我尝试了这个方法,但也不起作用:(在阅读代码之前,我误读并回答了问题。我在下面添加了一个答案。我知道您已经收到并接受了一个答案,但我必须提醒您,在混合使用jQuery和AngularJS的过程中,这两个都是DOM操作框架,继续这样做将导致沮丧,并且从长远来看很难找到bug。在不要使用jQuery来检索或设置值(
$(“#产品条目”).val()
),您应该通过
ng model
使用双向绑定。感谢您的回复,我尝试了您在这里说的内容,但这是控制台:angular.js:11706 ReferenceError:regex未在n.$scope.doSomething(pos.js:154)定义在HTMLButtonElement(angular.js:21700)的n$eval(angular.js:14570)的n$apply(angular.js:14669)的HTMLButtonElement(angular.js:21705)的HTMLButtonElement.dispatch(jquery.min.js:2)的HTMLButtonElement.v.handle(jquery.min.js:2)中,然后我尝试将这个“var regex=/^[0-9]+$/;”放在doSomething()中函数它可以工作,但即使产品名称在输入中,它给我的是:“未找到产品”抱歉,代码未经测试,我假设您的JS知识水平。您应该将其他所有内容移到新函数中(在新函数中定义要使用的内容)。我已经更新了Answer抱歉兄弟,感谢你对我的努力。它可以工作,但每次我编写任何其他产品时,它都会占用数据库中的第一个产品。控制台给我这个错误:“angular.js:11706 error:[$rootScope:inprog]at angular.js:38 at p(angular.js:14924)at n.$digest(angular.js:14366)在n$scope.doSomething(pos.js:169)在angular.js:12474在f(angular.js:21700)在n$eval(angular.js:14570)时非常感谢。它终于起作用了,我找不到你应该说的话。顺便说一句,是我的错,所有的产品都有相同的条形码,这意味着问题早些时候就解决了。再次感谢兄弟:):D
<button id="myButton" ng-click="doSomething()">Add Product to Sale</button>