画布签名触摸在phonegap中产生问题

Ara*_*vin 30 javascript sqlite android jquery-mobile cordova

我找到了一些与"phonegap canvas signature"相关的帖子,但是他们没有帮助.我有一些下拉框,文本框和一个签名字段.我想在sqlite数据库中插入这些字段.

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

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)");
Run Code Online (Sandbox Code Playgroud)

读取字段值,如正常的文本和下拉菜单签名字段就像

kundusSign = $("#mKundusskirt")[0];
kundensUnderSkrift = kundusSign.toDataURL();
Run Code Online (Sandbox Code Playgroud)

以下是插入数据的代码:

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);
    });
Run Code Online (Sandbox Code Playgroud)

我为签名添加了sign插件.现在我的问题是,当我输入签名字段时,不会插入数据库字段.此外,当我尝试删除符号插入查询并放置符号意味着另外两个表(成本和部分)值也未插入.如果我没有触摸符号字段,则插入toDataurl()格式的图像成功插入所有值.

我只在堆栈跟踪中遇到此错误:

sqlite (23) not authorised.

请给出一些解决方案.

编辑:我也试过这个:

tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]);
Run Code Online (Sandbox Code Playgroud)

Emi*_*oni 1

嗯,它可以来自很多地方。

首先,您是否在 Android(2.3 或更低版本)上测试它?如果是这样,那么问题很可能是.toDataUrl()Android 默认浏览器不支持,这意味着它也无法在 PhoneGap 中工作。

因此,我首先建议您仔细检查 kundensUnderSkrift 中是否确实有一个字符串。

第二,有时 WebSql 可能很棘手,所以为了安全起见,我将使用它来创建表:

tx.executeSql("CREATE TABLE IF NOT EXISTS sign(orderNr unique ,rapport,sign STRING)");
Run Code Online (Sandbox Code Playgroud)

WebSql 更新似乎根本不起作用,因此请确保清除数据或卸载,而不是再试一次。

第三你的陈述顺序看起来错误:

tx.executeSql("insert into sign(orderNr,sign,rapport)values(?,?,?)",[nr,rapport,kundensUnderSkrift]);
Run Code Online (Sandbox Code Playgroud)

应该:

tx.executeSql("insert into sign(orderNr,rapport,sign)values(?,?,?)",[nr,rapport,kundensUnderSkrift]);
Run Code Online (Sandbox Code Playgroud)

如果检查完所有 3 点后仍然无法正常工作,我建议尝试以下 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);});
Run Code Online (Sandbox Code Playgroud)

您可以使用 console.log 而不是警报,但在移动设备上,我发现使用警报进行调试要容易得多。(Windows Phone 除外,默认情况下不支持警报)。