Il touch della firma su canvas crea problemi in PhoneGap

Ho trovato alcuni post relativi a “phonegap canvas signature”, ma non hanno aiutato. Ho alcune caselle a discesa, caselle di testo e un campo firma. Voglio inserire questi campi nel database sqlite.

La creazione della mia tabella di database è simile alla seguente:

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)"); 

Leggi i valori del campo come normale per il testo e il dropdown per il campo firma della canvas è come

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

Ecco il codice per inserire i dati:

 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); }); 

Ho incluso il plugin di firma per le firme. Ora il mio problema è che quando digito il campo firma, i campi del database non sono inseriti. Inoltre, quando provo a rimuovere la query dell’inserto di segno e il segno di inserimento, anche i valori delle altre due tabelle (costi e parti) non vengono inseriti. Se non ho toccato i campi dei segni, tutti i valori sono stati inseriti correttamente per l’immagine che inserisce il formato toDataurl ().

Ho solo ricevuto questo errore nella traccia dello stack:

sqlite (23) not authorised .

Per favore, dai una soluzione a questo.

EDIT: ho anche provato questo:

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

Bene, può essere da molti posti.

Prima di tutto lo stai testando su Android (2.3 o inferiore)? Se è così, il problema è che probabilmente .toDataUrl() non è supportato dal browser predefinito Android, il che significa che non funzionerà neanche in PhoneGap.

Quindi, per prima cosa, ti suggerisco di fare in modo di ricontrollare che hai davvero una stringa in kundensUnderSkrift.

2 volte a volte WebSql può essere difficile Sarò così sul sicuro userò questo per creare la tabella:

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

Gli aggiornamenti di WebSql non sembrano funzionare affatto, quindi assicurati di cancellare i dati o di disinstallarli, piuttosto che provarci.

3 ° Il tuo ordine di istruzioni sembra sbagliato:

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

Dovrebbe essere:

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

Se dopo aver controllato tutti e 3 i punti non funziona ancora, suggerirò di provare il seguente approccio 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);}); 

È ansible utilizzare console.log anziché avvisi, ma su dispositivi mobili trovo molto più facile eseguire il debug con l’avviso. (eccetto Windows Phone, dove l’avviso non è supportato di default).

Fammi sapere se questo ti ha aiutato.

Dovresti davvero passare i callback degli errori ai metodi transaction() ed executeSql() : aiuterà a eseguire il debug delle operazioni del database durante lo sviluppo. Ti consigliamo di utilizzare qualcosa di diverso da alert() per la gestione degli errori in produzione.

 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); }