【发布时间】:2019-10-14 16:52:45
【问题描述】:
我的应用中有一个小确认窗口,用户必须在其中输入姓名和消息,然后输入他们的签名。我的问题是,当用户输入名称时,应用程序的焦点不会在有人使用签名板的那一刻消失,从而导致虚拟键盘在用户从触摸屏上松开手指的那一刻起弹出。这个焦点问题似乎只发生在移动设备上,并且在安卓和苹果设备上都会发生。
我尝试过使用 JQuery 和 Javascript,甚至是诸如 focus.blur 和 .focus() 之类的淘汰赛解决方案,但似乎没有任何效果。就像在移动设备上单击 HTML5 画布并不会转移焦点一样。
<div class="row">
<div class="col-md-6">
<form-group params="value: NameSignatory, attr: {'data-test-id':'name'}"></form-group>
<form-group params="value: EmailSignatory, attr: {'data-test-id':'email'}"></form-group>
<form-group params="value: SignatoryComment, attr: {'data-test-id':'comment'}"></form-group>
<div> </div>
<div> </div>
<div> </div>
</div>
<div class="col-md-6">
<div class="form-group has-feedback" data-bind="validationElement: SignatureJson">
<label class="large">Put your signature here:</label>
<em class="help-block" data-bind="validationMessage: SignatureJson"></em>
<signature-pad-v2 params="json: SignatureJson, imageUrl: ImageFileUrl"></signature-pad-v2>
</div>
</div>
</div>
脚本:
define([
"knockout",
"jquery",
"szimek-signature-pad",
"text!./signature-pad-v2.html"
], function (ko, $, SignaturePad, template) {
return {
template: template,
viewModel: {
createViewModel: function (params, componentInfo) {
var canvas,
signaturePad,
clearButton,
$element = $(componentInfo.element),
imageUrl = params.imageUrl ? params.imageUrl : ko.observable(),
json = params.json ? params.json : ko.observable(),
variableBorder = params.variableBorder ? params.variableBorder : ko.observable(1)
;
var callbacks = {
regenerateFromJson: function (data) {
signaturePad.fromData(data);
},
regenerateFromDataUrl: function (data) {
signaturePad.fromDataURL(data);
}
};
if (params.context) {
params.context(callbacks);
}
return {
init: function () {
console.log('signature-pad-v2 started', $element);
canvas = $element.find("canvas").get(0);
signaturePad = new SignaturePad(canvas,
{
minWidth: 1,
maxWidth: 2,
penColor: "rgb(51,97,155)",
backgroundColor: "rgb(255,255,255)",
onEnd: function () {
json(signaturePad.toData());
imageUrl(signaturePad.toDataURL());
}
});
document.getElementById("signature-pad-v2").style.border = ko.unwrap(variableBorder) + "px solid #c0c0c0";
clearButton = $element.find(".clearButton a");
clearButton.bind("click", function (evt) {
evt.preventDefault();
signaturePad.clear();
return true;
});
if (imageUrl()) {
signaturePad.fromDataURL(imageUrl());
}
else {
if (json()) {
signaturePad.fromData(json());
}
}
if (params.context) {
params.context(callbacks);
}
}
};
}
}
};
});
当用户在移动设备上签名时,焦点不会从文本字段中移除,一旦他们松开手指,键盘就会弹出。一个恼人的小不便。
【问题讨论】:
标签: javascript jquery html canvas knockout.js