canvas签名触摸在phonegap中造成问题

我发现了一些与“phonegap帆布签名”相关的post,但他们没有帮助。 我有一些下拉框,文本框和一个签名栏。 我想在sqlite数据库中插入这些字段。

我的数据库表创build如下所示:

tx.executeSql("CREATE TABLE IF NOT EXISTS parts(id INTEGER PRIMARY KEY AUTOINCREMENT,nr,productId,description,toolsVerified)"); tx.executeSql("CREATE TABLE IF NOT EXISTS costs(id INTEGER PRIMARY KEY AUTOINCREMENT,nr,date,starttime,endtime,reason,cost)"); tx.executeSql("CREATE TABLE IF NOT EXISTS sign(orderNr unique ,rapport,sign)"); 

阅读像正常的文本字段值和canvas签名字段的下拉是像

 kundusSign = $("#mKundusskirt")[0]; kundensUnderSkrift = kundusSign.toDataURL(); 

这里是插入数据的代码:

 db .transaction(function(tx) { // for parts table tx .executeSql( "insert into parts(nr,productid,description,toolsVerified) values(?,?,?,?)", [ nr, productId, desc, tool ]); // for cost table tx .executeSql( "insert into costs(nr,date,starttime,endtime,reason,cost) values (?,?,?,?,?,?)", [ nr, date, startTime, endTime, reason, cost ]); // for sign table signQuery = 'UNION SELECT ' + nr + ", '" + rapport + "','" + kundensUnderSkrift + "'"; tx .executeSql('insert or replace into "sign" SELECT "orderNr","rapport","sign"' + signQuery); }); 

我包含签名插件的签名。 现在我的问题是,当我input签名字段,数据库字段不插入。 另外,当我尝试删除符号插入查询,并把符号意味着其他两个表(成本和部分)值也没有插入。 如果我没有触及符号字段,则插入toDataurl()格式的所有值都插入成功。

我只有堆栈跟踪中出现这个错误:

sqlite (23) not authorised

请给一些解决scheme。

编辑:我也试过这个:

 tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]); 

Related of "canvas签名触摸在phonegap中造成问题"

那么,它可以来自很多地方。

首先你在Android上testing它(2.3或更低版本)? 如果是这样,问题很可能是.toDataUrl()不支持Android默认浏览器,这意味着它不会在PhoneGap中工作。

所以首先我想我build议你要做的是仔细检查你确实在kundensUnderSkrift中有一个string。

第二次有时WebSql可能会很棘手我会这样安全的一面我将用这个来创build表:

 tx.executeSql("CREATE TABLE IF NOT EXISTS sign(orderNr unique ,rapport,sign STRING)"); 

WebSql更新似乎并没有工作,所以要确保你清除数据或卸载,而不是再给它一个。

第三您的对帐单看起来不对:

 tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]); 

应该:

 tx.executeSql("insert into sign(orderNr,rapport,sign)values(?,?,?)",[nr,rapport,kundensUnderSkrift]); 

如果在检查完所有3分后仍然不能工作,我会build议尝试以下UGLY方法:

 tx.executeSql("insert into sign(orderNr,sign,rapport) values('"+nr+"','"+ kundensUnderSkrift+"','"+rapport+"');",[],function(tx,success){alert("ALL OK");},function(tx,error){alert(error.message);}); 

你可以使用console.log而不是alert,但是在移动设备上我发现用alert做debugging要容易得多。 (除了手机,默认情况下不支持警报)。

让我知道这是否帮助你。

你真的应该将错误callback传递给transaction()executeSql()方法 – 它将有助于在开发中debugging数据库操作。 您将需要使用alert()以外的其他方式进行生产中的error handling。

 db.transaction(function(tx) { // for parts table tx.executeSql( "insert into parts(nr,productid,description,toolsVerified) values(?,?,?,?)", [ nr, productId, desc, tool ], null, sqlError ); // for cost table tx.executeSql( "insert into costs(nr,date,starttime,endtime,reason,cost) values (?,?,?,?,?,?)", [ nr, date, startTime, endTime, reason, cost ], null, sqlError ); // for sign table tx.executeSql( 'insert or replace into sign(orderNr,rapport,sign) values (?,?,?)' [nr, rapport, kundensUnderSkrift], null, sqlError ); }, xactError); function sqlError(tx, err) { alert("Statement failed: " + err.message); } function xactError(err) { alert("Transaction failed: " + err.message); }