[英]How can I validate I have drawn something in jSignature panel or not?
jSignature
有畫布,它有一個類。 如何驗證jSignature我是否畫了一些東西?
我為click事件添加了一個綁定。
$sigdiv.bind('click', function(e) {
$("#num_strok").val(parseInt($("#num_strok").val()) + 1);
});
問題是我點擊某個角落也是num_strock
得到的增加。 對於一些拖累它不會增加。
我曾經在谷歌試過它是否有任何內置的isEmpty
功能是否存在。 但我還沒有找到任何東西。
if( $sigdiv.jSignature('getData', 'native').length == 0) {
alert('Please Enter Signature..');
}
根據jSignature網站 ,API中有一個getData
函數。 如果在空簽名區域上使用getData
函數作為參考,則可以隨時使用getData
並將其與空引用進行比較。 然后,您就可以判斷簽名區域中是否寫入了某些內容。
這只是我的一個猜測,因為我沒有使用過這個腳本,但我覺得這樣的事情能夠奏效。
我也在網站上找到了這個
初始化jSignature的dom元素在完成筆划添加到存儲之后立即發出“更改”事件。 (換句話說,當用戶完成繪制每個筆划時。如果用戶繪制3個筆划,則在每個筆划完成后,此事件將發出3次。)
以下是綁定到該事件的方式:
$("#signature").bind('change', function(e){ /* 'e.target' will refer
to div with "#signature" */ })
事件通過“線程”(setTimeout(...,3))異步發出,因此您不需要將事件處理程序包裝到任何類型的“線程”中,因為jSignature小部件將繼續並且不會等待您將完成自定義事件處理程序邏輯。
難道你不能設置一個在第一個change
事件中設置為true的標志變量嗎? 這表明有些東西被寫入該區域
如果存在任何點,您可以檢查base30向量。
var isSignatureProvided=$sigdiv.jSignature('getData','base30')[1].length>1?true:false;
聚會很晚......所以我想對我的發現給出一些意見,每個都與使用$("#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 = $("#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 = $("#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精神壓縮格式,針對荒謬的緊湊性和本機URL兼容性進行了調整。 它是“本機”數據結構,壓縮成所有向量的緊湊字符串表示。
image
- 這是我要避免驗證的選擇。 它在第二個索引位置生成一個帶有長字符串的對象。 我測量的最后一個是672個字符長。 無論sig框是空白還是使用,使用image
生成一個字符串。 為了使事情更加無用,Chrome中的空白簽名框與FF Developer中的空白簽名框不同。 我確定image
值有用,但只是沒有驗證。
svgbase64
- 這與具有異常的image
類似。 與image
不同,使用svgbase64
會在第二個位置產生一個長長的短字符串。 此外,當我執行Chrome verse FF Developer檢查時,此字符串也是相同的。 這是我停止測試的地方。 所以我假設您可以使用svgbase64
進行驗證。
這些是我的結論,你的結論可能會有所不同。 請不要對我不好。
搜索javascript文件中的代碼。 檢查他們何時隱藏“撤消中風”塊
t.dataEngine.data.length
這將幫助您查找簽名面板的筆划數。
這對我有用,部分使用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>
也許嘗試這樣的事情(假設您的簽名字段屬於“簽名”類)...
$('.signature').each(function (index) {
var datapair = $(this).jSignature("getData", "svgbase64");
if (datapair[1].length > 1000 ) {
// Signature is valid; do something with it here.
}
});
最好的答案:
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..');
}
不幸的是,沒有現有的答案對我有用。 在我的網站上,我有兩種輸入簽名的方法: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();
}
從這里采用: 如何檢查畫布是否為空白?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.