继续here ...因为问题已明显改变(在我看来)
这是我的代码
for (var i = 0; i < len; i++) {
(function () {
var queryid = results.rows.item(i).id; //sql primary key
var divid = "#" + queryid; //assigned id to divs
var pressTimer;
$(divid).mouseup(function(){ //func to handle tap + hold
clearTimeout(pressTimer)
// Clear timeout
return false;
}).mousedown(function(){
// Set timeout
pressTimer = window.setTimeout(function() {
alert(divid);
$(".somediv").show();
$("#anotherdiv").hide();
$("#button").on("click", function(){
var db = window.openDatabase("mydb", "1.0", "mydb", 200000);
db.transaction(editrow);
function editrow(tx){
var value1 = $("#inputbox1").val();
var value2 = $("#inputbox2").val();
tx.executeSql("UPDATE mydb SET column1 = " + value1 + ", column2 = " + value2 + " WHERE id = " + queryid);
alert(divid); ********
successCB();} //query function
})
},1000)
return false;
});
})();
}
如果我点击div并编辑值,则会成功提交... 但是,如果之后我选择另一个div来更新其字段,那么新值将更新为选定的div,以及之前选择的div ..
例如我选择div1并更新值一切正常
如果之后我选择了div2,那么div1和div2值都会更新为div2的更新值
答案 0 :(得分:1)
您不止一次绑定事件。在div中的每个mousedown中,您都将click事件绑定到按钮。当你在jquery中调用“on”或“click”时,你不是 asigning 事件处理程序,你添加处理程序。
我不明白你是否需要调用setTimeout。
试试这个aproach insted:
var lastClickedId = null;
function editrow(tx) {
var value1 = $("#inputbox1").val();
var value2 = $("#inputbox2").val();
var queryid = lastClickedId;
tx.executeSql("UPDATE mydb SET column1 = " + value1 + ", column2 = " + value2 + " WHERE id = " + queryid);
alert(queryid);
lastClickedId = null;
successCB();
} //query function
$("#button").on("click", function(){
if(lastClickedId != null)
{
var db = window.openDatabase("mydb", "1.0", "mydb", 200000);
db.transaction(editrow);
}
});
for (var i = 0; i < len; i++) {
(function () {
var queryid = results.rows.item(i).id; //sql primary key
var divid = "#" + queryid; //assigned id to divs
$(divid).click(function(){
lastClickedId = queryid;
});
})();
}
<强>更新强>
使用 bind(func), on(func), click(func)等绑定jquery中的元素时,你是注册函数 func ,以便在事件发生时调用。您可以注册任意数量的功能。所以,例如,如果你这样做:
$("#div1").on("click", function() { alert("hello"); });
$("#div1").on("click", function() { alert("world"); });
单击时会显示两个警报。这是因为jquery管理事件的方式。它会调用您在事件中传递的每个函数。
要使用 分离您在该元素(或多个元素)上发布的所有点击事件,只需执行以下操作:
$("#div1").off("click");
在“纯”javascript中你可以这样做:
var div1 = document.getElementById("div1");
div1.onclick = function() { alert("hello"); };
div1.onclick = function() { alert("world"); };
在第二个示例中,只会调用一个警报,因为您直接将值赋予函数onclick。 并删除该事件:
div1.onclick = null;