这是previous stackoverflow问题的延续。 我已经重命名了一些变量,以便告诉我什么是关键字以及我可以控制的名称。
问:为什么deleteRow功能不起作用?
<html>
<head>
<title>html5 openDatabase Hello World</title>
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1");
google.setOnLoadCallback(OnLoadCallback);
function OnLoadCallback() {
var dbo;
dbo = openDatabase('HelloWorld');
dbo.transaction(
function(T1) {
T1.executeSql(
'CREATE TABLE IF NOT EXISTS myTable ' +
' (myTableID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
' Field1 TEXT NOT NULL );'
);
}
);
dbo.transaction(function(T2) {
T2.executeSql('SELECT * FROM myTable',[], function (T6, result) {
for (var i=0; i < result.rows.length; i++) {
var row = result.rows.item(i);
$('#savedData').append('<li id="'+row.myTableID+'">' + row.Field1 + '</li>');
}
}, errorHandler);
});
$('form').submit(function() {
var xxx = $('#xxx').val();
dbo.transaction(
function(T3) {
T3.executeSql(
'INSERT INTO myTable (Field1) VALUES (?);', [xxx], function(){
$('#savedData').append('<li id="ThisisWhereIneedHELP">' + xxx + '</li>');
$('#xxx').val('');
},
errorHandler
);
}
);
return false;
});
$('#savedData > li').live('click', function (){
deleteRow(this.id);
$(this).remove();
});
}
function deleteRow(myTableID) {
alert('trying to delete');
dbo.transaction(function(T4) {
T4.executeSql('DELETE FROM myTable WHERE myTableID = ?', [myTableID], function(){
alert('Deleted!');
}, errorHandler);
});
}
function errorHandler(T5, error) {
alert('Oops. Error was '+error.message+' (Code '+error.code+')');
// T5.executeSql('INSERT INTO errors (code, message) VALUES (?, ?);',
// [error.code, error.message]);
return false;
}
</script>
</head>
<body>
<form method="post">
<input name="xxx" id="xxx" />
<p>
<input type="submit" name="OK" />
</p>
<ul id="savedData">
</ul>
</form>
</body>
</html>
答案 0 :(得分:1)
您需要在 OnLoadCallback 功能之外声明 dbo 变量。 此外,您目前还需要更新 openDatabase 调用的语法。
答案 1 :(得分:0)
我想没有人会回答这个问题,所以我会把它关闭。