在 AngularJs 中聆听签名板的变化
Listening to signature pad changes in AngularJs
我正在使用 signature_pad 和电子邮件文本字段,在我的 Web 应用程序 (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">×</button>
<h4 class="modal-title">Bestellung bestätigen</h4>
</div>
<div class="modal-body">
<p>Mit ihrer Unterschrift bestä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ätigen</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
</div>
在我的控制器中:
创建 SignaturePad:
$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();
};
你能试试这个吗?
在您的 HTML 中,将 x-ng-init 更改为 x-ng-mouseup 事件 canvas:
<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 是否符合您的需要。
我正在使用 signature_pad 和电子邮件文本字段,在我的 Web 应用程序 (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">×</button>
<h4 class="modal-title">Bestellung bestätigen</h4>
</div>
<div class="modal-body">
<p>Mit ihrer Unterschrift bestä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ätigen</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
</div>
在我的控制器中:
创建 SignaturePad:
$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();
};
你能试试这个吗?
在您的 HTML 中,将 x-ng-init 更改为 x-ng-mouseup 事件 canvas:
<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 是否符合您的需要。