2012-10-13 51 views
0

here继续...因为这个问题已经signifally改变(在我看来)JavaScript的不断循环

这里是我的代码

 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 ..

例如i选择div1并更新价值ES一切正常

如果这之后,我选择DIV2那么这两个DIV1和DIV2值与DIV2

+0

我不明白你想用* setTimeout *做什么。你想让*#按钮*对最后一次点击的div进行更新吗?它必须要整整一秒钟才能完成? – Pato

+0

setTimeout只是触发div(按钮)继续其事件,在屏幕上长时间敲击后..因为即时通讯使这个智能手机,我不希望这个特定的行动被点击触发,但点击+保持.. – nikolas

回答

1

你要绑定的事件不止一次更近的值更新。在div上的每个mousedown中,您都将一个点击事件绑定到该按钮。当你在jquery中调用“on”或“click”时,你不是asigning事件处理程序,你是添加处理程序。

我不明白你是否需要调用setTimeout。

尝试这种形式给出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; 
     }); 
    })(); 
} 

UPDATE:

当您绑定使用绑定(FUNC)在jQuery的元素(FUNC)点击(FUNC)等,你正在注册的功能func每当事件发生时都会被调用。您可以注册任意数量的功能。因此,例如,如果您这样做:

$("#div1").on("click", function() { alert("hello"); }); 
$("#div1").on("click", function() { alert("world"); }); 

当您单击时,它将显示两个警报。这是因为jquery管理事件的方式。它调用您在事件中传递的每个函数。

要与分离所有你atached该元素的点击事件(或要素)上,只是做:

$("#div1").off("click"); 

在 “纯” 的JavaScript,你可以这样做:

var div1 = document.getElementById("div1"); 

div1.onclick = function() { alert("hello"); }; 
div1.onclick = function() { alert("world"); }; 

而在第二个示例中,只会调用一个警报,因为您直接为函数onclick赋值。 并删除事件:

div1.onclick = null; 
+0

嗨帕托,我试过它包括与mouseup/down..and它真的好像工作的代码..(我认为所有的技巧都是通过lastClickedId变量成功完成的......并且如果关于它的声明是否为null .. :) 我对绑定单击事件和分配单击事件以及添加处理程序有点困惑。但我不知道你是否有时间进一步评论这些..要真正理解发生了什么,什么是错误的/不好的做法.. – nikolas

+0

我已经做了一个更新,我希望它可以帮助你。 – Pato

+0

Palo真的很有帮助..非常感谢你我真的很感激:-) – nikolas