2010-02-24 80 views
2

如果用戶點擊「添加」,我需要暫時禁用所有添加/刪除偵聽器,直到myid失去焦點。jQuery插入/刪除網格

<!DOCTYPE HTML> 
<html> 
<head> 
<script src="http://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
function OnLoad() { 
    var myCounter = 0; 
    $('.insert').live('click', function() { 
     var currentRow = $(this).parents("tr:first"); 
     var newRow = currentRow.clone(true); 
     newRow.children('td:last').empty().append('<input name="myid">'); 
     currentRow.after(newRow); 
     document.myForm.myid.focus(); 
    }); 
    $('.delete').live('click', function() { 
     if(confirm("Are you sure?")){ 
      $(this).parents("tr").remove(); 
     } 
    }); 
} 
google.load("jquery", "1"); 
google.setOnLoadCallback(OnLoad); 
</script> 
</head> 
<body> 
<form name="myForm"> 
<table border="1"> 
<tr> 
<td class="insert">Add</td> 
<td class="delete">Erase</td> 
<td>Sample data goes here</td> 
</tr> 
</table> 
</form> 
</body> 
</html> 

換句話說,我不希望他們點擊「添加」,然後再次「添加」。

+1

你應該改變'追加('')'到'append('')'(自閉標籤) – SLaks 2010-02-24 20:16:59

回答

4

您需要創建一個變量來跟蹤用戶是否被允許單擊Add

單擊添加時,將變量設置爲false

當文本框失去焦點,將其設置爲true再次,像這樣:

$('input[name=myid').live('focusout', function() { canAdd = true; })); 

然後,添加if(!canAdd) return;Add處理

+0

直播('focusout'),功能應該是 直播('focusout',功能 – 2010-02-24 20:56:28

2

當輸入獲得焦點時,您可能會發現更容易設置變量,並在其丟失時將其清除。添加和刪​​除的onClick函數應檢查是否設置了此選定變量,並根據它返回或繼續。

或者,您可以使用按鈕進行添加和刪除,然後在輸入接收和鬆散對焦時設置/清除添加/刪除按鈕的禁用屬性。

1
var adding = false; 
$('.insert').live('click', function() { 
    if(!adding){ 
     // Do stuff 
     adding = true; 
    } 
} 
+1

不會超出當前執行範圍輸入 – 2010-02-24 20:16:24

1

裹每個事件處理程序到的代碼的開始了自己的功能:

function insertHandler() { 
    var currentRow = $(this).parents("tr:first"); 
    var newRow = currentRow.clone(true); 
    newRow.children('td:last').empty().append('<input name="myid">'); 
    currentRow.after(newRow); 
    document.myForm.myid.focus(); 
} 

在你的兩個方法處理程序的開始,解除綁定click事件:

$('.insert').live('click', function() { 
    $(this).unbind("click"); 
    insertHandler(); 
}); 

添加一個新的處理程序,結合使用livefocusout事件(如您的輸入編程插入),它重新綁定你的函數你的活動:

$("input[name=myid]").live("focusout", function() { 
    $(".insert").live("click", insertHandler); 
}); 
+0

我想我需要pa ss'this'來insertHandler。 – 2010-02-24 20:29:08

+0

我通過將currentRow傳遞給insertHandler來實現它(我使用Firefox)。 感謝您的幫助! 請繼續關注我的下一個問題! – 2010-02-24 20:35:39

+0

哦等等!出於某種原因,「添加」不是解除綁定。 – 2010-02-24 20:37:51