【问题标题】:Listening to signature pad changes in AngularJs在 AngularJs 中监听签名板的变化
【发布时间】:2023-03-20 08:57:01
【问题描述】:

我正在使用signature_pad 和电子邮件文本字段,在继续我的网络应用程序 (x-ng-disabled="!checkSignatureAndEmail()") 之前必须填写这两个字段。

文本字段有一个ng-model,因此任何更改都会立即注意到,但签名板是纯 JavaScript。因此,如果我先输入电子邮件,然后在签名板中登录,则该按钮将不会启用。

有没有办法注册一个监听器或类似的东西?如果是,我是怎么做到的?

<div class="container">
    <div class="modal fade" id="signatureDialog" role="dialog">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="modal-title">Bestellung best&auml;tigen</h4>
                </div>
                <div class="modal-body">
                    <p>Mit ihrer Unterschrift best&auml;tigen Sie... bla bla..</p>
                    <input type="text" class="form-control" x-ng-model="email">
                    <br>
                    <canvas id="signature-pad" width="700" height="150" style="border:1px solid #B0B0B0; border-radius: 4px;" x-ng-init="initSignaturePad()"></canvas>
                    <br>
                    <button type="button" class="btn btn-default" x-ng-click="signaturePad.clear()">Clear</button>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-primary" x-ng-disabled="!checkSignatureAndEmail()" x-ng-click="saveOrder(orderInput)" data-dismiss="modal">Best&auml;tigen</button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">Abbrechen</button>
                </div>
            </div>
        </div>
    </div>
</div>

在我的控制器中:

创建签名板:

$scope.initSignaturePad = function() {
    $scope.signaturePad = new SignaturePad(document.getElementById('signature-pad'), {
          minWidth: 1.2,
          maxWidth: 3,
          backgroundColor: 'rgba(250, 250, 250, 1)',
          penColor: 'rgb(0, 0, 100)'
    });
}

验证函数:

$scope.checkSignatureAndEmail = function() {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test($scope.email) && !$scope.signaturePad.isEmpty();
};

【问题讨论】:

    标签: javascript angularjs signaturepad


    【解决方案1】:

    你能试试这个吗?

    在您的 HTML 中,将 x-ng-init 更改为画布上的 x-ng-mouseup 事件:

    <canvas id="signature-pad" x-ng-mouseup="initSignaturePad()"></canvas>
    

    在你的控制器中:

      $scope.emptyCanvas = true;
    
      $scope.$watch('emptyCanvas', function() {
          $scope.checkSignatureAndEmail();
      });
    
      $scope.checkSignatureAndEmail = function() {
          var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
          return re.test($scope.email) && !$scope.emptyCanvas;
      };
    
      $scope.initSignaturePad = function() {    
            $scope.emptyCanvas = $scope.signaturePad.isEmpty();
        };
    

    这对我有用,但我不知道 x-ng-mouseup 是否符合您的需求。

    【讨论】:

    • 很好,坦克很多!我刚刚在我的画布上添加了x-ng-mouseup="checkSignatureAndEmail()",它运行良好!
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多