我在移动应用中。
我有一个创建动态复选框(getItem1)的函数,在这个函数中我调用另一个更新sqlite的函数。
function getItem1(flatname, flatdescription) {
$(document).ready(function(){
$('#Code').empty();
$('#displayflat article3').empty();
$('#displayflat article1').empty();
$('#displayflat article2').empty();
$('#shares').val('');
});
var gtotal=0;
var total = 0;
var payment = 0;
var previouspayments = 0;
var sofeilon = 0;
var total1 = 0;
var payment1 = 0;
var previouspayments1 = 0;
var sofeilon1 = 0;
var len = 0;
var list = $('#Code'),
allbarcode = [],
my = {},
barcode = [],
barcodeamount = [],
barcodeprevious = [],
items = [];
$.mobile.notesdb.transaction(function(t) {
t.executeSql('SELECT barcode, buildingcode, buildingaddress, flatname, flatdescription, entryseason, period, amount, pastpayments, todaypayments, paydate, receiptno FROM bill WHERE flatname = ? AND flatdescription = ?',
[flatname, flatdescription],
function(t, resultflatname) {
var i,
ib,
len = resultflatname.rows.length,
row = 0,
rowprev = 0,
rowb = 0;
for (i = 0; i < len; i += 1) {
row = resultflatname.rows.item(i);
if (row.amount > row.todaypayments + row.pastpayments) {
if (row.receiptno == 0){
items.push('<input type="checkbox" name="code_'+ i +'" id="code_'+ i +'" value="' + row.amount + '" previous="' + row.pastpayments + '" barcode="' + row.barcode + '" todayp="' + row.todaypayments + '"/><label for="code_'+ i +'">' + row.period +'..........'+ row.amount+'</label></br>');
} else {
if ((row.receiptno > 0) && (row.amount > row.todaypayments + row.pastpayments)){
items.push('<input type="checkbox" name="code_'+ i +'" id="code_'+ i +'" value="' + row.amount + '" previous="' + row.pastpayments + '" barcode="' + row.barcode + '" todayp="' + row.todaypayments + '"/><label for="code_'+ i +'">' + row.period +'..........'+ row.amount+'</label></br>');
}
}
}
allbarcode[i] = row.barcode;
// barcodeamount[i] = row.amount;
// barcodeprevious[i] = row.pastpayments;
previouspayments1 = previouspayments1 + row.pastpayments;
previouspayments = previouspayments1.toFixed(2);
sofeilon1 = sofeilon1 + row.amount;
sofeilon = sofeilon1.toFixed(2);
total1 = sofeilon - previouspayments;
total = total1.toFixed(2);
list.html(items.join('\n'));
$('#displayflat h1').text(row.flatname);
$('#displayflat article').html('<h2>Flatname : ' + row.flatdescription + '</h2>');
if (total != 0){
$('#displayflat article1').html('<p>Total : ' + total + '</p>');
$('#displayflat article2').html('<p>Months Total : ' + sofeilon + '</p>');
}
if (previouspayments != 0) {
$('#displayflat article3').html('<p>Previous Payments : <font color="red">' + previouspayments + '</font></p>');
}
}
function calcTotal() {
$("input:checked").each(function() {
var value = [$(this).attr("value")]-[$(this).attr("previous")];
payment = payment + parseFloat(value); //total = total + value
});
}
function barcodeTotal() {
barcode = [];
barcodeamount[i];
barcodeprevious[i];
$("input:checked").each(function(i) {
barcode[i] = $(this).attr("barcode");
barcodeamount[i] = $(this).attr("value");
barcodeprevious[i] = $(this).attr("previous");
});
}
calcTotal();
$("#Payment").html('<p class="total">Total Payment: <strong>' + payment.toFixed(2) + '</strong></p>');
$("input:checkbox, input:radio").click(function() {
payment = 0;
calcTotal();
$("p.total").html("Total Payment: <strong>" + payment.toFixed(2) + "</strong>");
});
$('#shares').keyup(function(){
payment = 0;
calcTotal();
gtotal = ($('#shares').val() * 1) + payment;
gtotal = gtotal.toFixed(2);
$("p.total").html("Total Payment: <strong>" + gtotal + "</strong>");
});
$('#shares').keyup(function(){
$("input:checkbox, input:radio").click(function() {
payment = 0;
calcTotal();
gtotal = ($('#shares').val() * 1) + payment;
gtotal = gtotal.toFixed(2);
$("p.total").html("Total Payment: <strong>" + gtotal + "</strong>");
});
});
$("#pay").click(function(e) {
barcodeTotal();
updateItem(payment.toFixed(2), gtotal, barcode, barcodeamount, barcodeprevious, allbarcode);
});
})
});
}
和updateItem的代码。我只使用警报来观察执行了多少次。
function updateItem(payment, gtotal, barcodetotal, barcodeamount, barcodeprevious, allbarcode) {
alert(allbarcode);
alert(barcodeamount);
alert(barcodeprevious);
var i,
j,
len = barcodetotal.length,
lenall = allbarcode.length,
today,
receiptno,
row = [],
barcodeamount,
barcodeprevious,
enanti = 0,
newbarcode,
pasttotal,
minimum = 0,
myrow;
$.mobile.notesdb.transaction(function(t) {
t.executeSql('SELECT userid, name, receiptno FROM collector',
[], function(t, resultcollector) {
myrow = resultcollector.rows.item(0);
receiptno = myrow.receiptno + 1;
t.executeSql('UPDATE collector SET receiptno = ?', [receiptno]);
if (payment > 0 && gtotal == 0) {
for (i = 0; i < len; i += 1) {
row = barcodetotal[i];
for (j = 0; j < lenall; j += 1) {
if (allbarcode[j] == row){
var place = j;
}
}
allbarcode.splice(place, 1);
barcodeprevious.slice(place, 1);
today = barcodeamount[i] - barcodeprevious[i];
var billtoday = barcodeamount[i];
t.executeSql('UPDATE bill SET pastpayments = ?, receiptno = ?, paydate = date("now") WHERE barcode = ?', [billtoday, receiptno, row]);
t.executeSql('INSERT INTO billpayments (barcode, amount, collectorid, receiptno) VALUES (?,?,?,?)',
[row, today, myrow.userid, receiptno]);
}
}
if (gtotal > 0) {
enanti = gtotal - payment;
//alert(enanti);
var minimum = Math.min.apply( null, allbarcode );
alert(minimum);
t.executeSql('SELECT barcode, amount, pastpayments, todaypayments FROM bill WHERE barcode = ?',
[minimum],
function(t, previousp) {
var myr = previousp.rows.item(0);
var todaypp = myr.pastpayments + enanti;
t.executeSql('UPDATE bill SET pastpayments = ?, todaypayments = ?, receiptno = ?, paydate = date("now") WHERE barcode = ?', [todaypp, enanti, receiptno, minimum]);
t.executeSql('INSERT INTO billpayments (barcode, amount, collectorid, receiptno) VALUES (?,?,?,?)',
[minimum, enanti, myrow.userid, receiptno]);
});
}
$.mobile.changePage('#display', 'slideup', false, true);
})
});
}
第一次执行getItem1时一切正常。
对于getItem1第二次执行updateItem,我想了三次。
getItem1第三次使用updateItem 3次,依此类推。
毕竟我无法观察数据是否正常......
答案 0 :(得分:3)
您多次连接点击事件。每次通过您都需要删除点击事件。
更改您的行:
$("#pay").click(function(e) {
为:
$("#pay").unbind('click').click(function(e) {
答案 1 :(得分:0)
移动
$("#pay").click(function(e) {
barcodeTotal();
updateItem(payment.toFixed(2), gtotal, barcode, barcodeamount, barcodeprevious, allbarcode);
});
在该功能之外,进入document.ready
并使用on
http://api.jquery.com/on/