2012-10-13 84 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