jSignature
有画布,它有一个类。如何验证jSignature我是否画了一些东西?
我为点击事件添加了一个绑定。
$sigdiv.bind('click', function(e) {
$("#num_strok").val(parseInt($("#num_strok").val()) + 1);
});
问题是,即使我点击某个角落num_strock
也会增加。而对于一些拖累它不会增加。
我曾在谷歌尝试过是否有内置的isEmpty
功能。但我还没有找到任何东西。
答案 0 :(得分:14)
if( $sigdiv.jSignature('getData', 'native').length == 0) {
alert('Please Enter Signature..');
}
答案 1 :(得分:4)
根据jSignature website,API中有getData
个功能。如果您使用空签名区域上的getData
函数作为参考,则可以随时使用getData
并将其与空引用进行比较。然后,您就可以判断签名区域中是否写入了某些内容。
这只是我的一个猜测,因为我没有使用过这个脚本,但我觉得这样的东西能够起作用。
我也在the website
上找到了这个初始化jSignature的dom元素发出'change' 完成笔划后立即将事件添加到存储器中。 (换句话说,当用户完成绘制每个笔划时。如果用户绘制 3招,这个事件在每次击球完成后发出3次。)
以下是绑定到该事件的方式:
$("#signature").bind('change', function(e){ /* 'e.target' will refer
to div with "#signature" */ })
事件是通过“线程”(setTimeout(...,3))异步发出的,因此您不需要将事件处理程序包装成任何类型的“线程”,因为jSignature小部件将继续并且不会等待你完成自定义事件处理程序逻辑。
难道你不能只设置一个在第一个change
事件中设置为true的标志变量吗?这表明某事被写入区域
答案 2 :(得分:2)
如果存在任何点,您可以检查base30向量。
var isSignatureProvided=$sigdiv.jSignature('getData','base30')[1].length>1?true:false;
答案 3 :(得分:2)
聚会很晚......所以我想对我的调查结果给出一些意见,每一个都与...有关
使用$("#sigDiv").jSignature('getData', 'putSomethignInHere')
函数验证签名是否存在。
以下是我检查传递给jSignature函数的第二个属性的选项:
native
在sig框为空时返回对象.length == 0
的对象,但在sig框中有内容时返回.length > 0
。如果你想知道有多少笔画只使用这个对象的长度。
注意:根据jSignature文档:
" Stroke = mousedown + mousemoved * n(+ mouseup但我们不记录那个"结束/缺少运动"指示符)"
base30
也会返回一个对象。在这里,我查看了此对象的第二个索引位置中的信息。
x = $("#sigDiv").jSignature('getData', 'base30')[1].length > 0 ? TRUE : FALSE
这里x
如果框已经签名则为TRUE,而当jSig框保持不变时则为FALSE。
在我的情况下,我使用base30
属性来验证签名复杂性,而不只是"最终用户是否画了一些东西?"。
x = $("#sigDiv").jSignature('getData', 'base30')[1].length > {insertValueHere} ? TRUE : FALSE
。要验证最终用户在框中实际签名并提供的不仅仅是简单的'。小' x。由base30
产生的第二个索引的返回值随着复杂性而变大。因此,如果用户确实输入了一个点,
x = $("#sigDiv").jSignature('getData', 'base30')[1].length
约为5.产生的值越大越大,最终用户在框中绘制的越多。我在测试过程中记录的最高长度是2272.我在盒子里乱涂乱画,整个15秒。
根据jSig文档:
base30(别名image / jSignature; base30)(导出和导入)(VECTOR)数据格式是Base64-spirited压缩格式,针对荒谬的紧凑性和本机URL兼容性进行了调整。这是"本地"数据结构压缩成所有向量的紧凑字符串表示。
image
- 这是我要避免验证的选择。它在第二个索引位置生成一个带有长字符串的对象。我测量的最后一个是672个字符长。无论sig框是空白还是使用,使用image
都会生成一个字符串。为了使事情更加无用,Chrome中的空白签名框与FF Developer中的空白签名框不同。我确定image
值有用,但只是没有验证。
svgbase64
- 这与image
类似,但有例外情况。与image
不同,使用svgbase64
会在第二个位置生成一个长长的短字符串。此外,当我执行Chrome verse FF Developer检查时,此字符串也是相同的。这是我停止测试的地方。所以我假设您可以使用svgbase64
进行验证。
这些是我的结论,你的结论可能会有所不同。请不要低声对我说声。
答案 4 :(得分:0)
搜索javascript文件中的代码。检查他们何时隐藏“撤消中风”块
t.dataEngine.data.length
这将帮助您查找签名面板的笔划数。
答案 5 :(得分:0)
这对我有用,部分使用roch代码: 它在提交验证之前基本上将签名分配给隐藏的textarea:
<div id="signatureparent">
<div id="signature"></div>
<label for='signature_capture' class='error'></label>
</div>
<span style="visibility:hidden;">
<textarea name="signature_capture" class="required" id="signature_capture"></textarea>
</span>
<script>
$(document).ready(function(){
$('#submit').click(function() {
var isSignatureProvided=$('#signature').jSignature('getData','base30')[1].length>1?true:false;
if (isSignatureProvided) {
var $sigdiv = $("#signature");
var datapair = $sigdiv.jSignature("getData", "svgbase64");
var data = $('#signature').jSignature('getData');
$("#signature_capture").val(data);
}
});
});
</script>
答案 6 :(得分:0)
也许尝试这样的事情(假设您的签名字段属于班级&#39;签名&#39;)...
$('.signature').each(function (index) {
var datapair = $(this).jSignature("getData", "svgbase64");
if (datapair[1].length > 1000 ) {
// Signature is valid; do something with it here.
}
});
答案 7 :(得分:0)
最佳答案:
if($sigdiv.jSignature('getData', 'native').length == 0) {
alert('Please Enter Signature..');
}
产生了以下错误:
$sigdiv.jSignature(...) is undefined
所以我建议使用:
if(typeof($sigdiv.jSignature('getData', 'native')) != 'undefined') {
alert('Please Enter Signature..');
}
答案 8 :(得分:0)
不幸的是,没有现有的答案对我有用。在我的网站上,我有两种输入签名的方法:manual和jSignature('importData',imgBase64) jSignature('getData','native')的测试仅适用于手动绘制。对于图像方式,没有任何效果。 解决方案似乎很简单。只需测试canvas元素。它可能不适用于IE9,但谁在乎。这是TypeScript中的内容:
isSignatureBlank() {
var canvas = <any>$('#signatureElem').find("canvas")[0];
if (!canvas) return true;
this.emptyCanvas = this.emptyCanvas || document.createElement('canvas');
this.emptyCanvas.width = canvas.width;
this.emptyCanvas.height = canvas.height;
return canvas.toDataURL() == this.emptyCanvas.toDataURL();
}