2010-02-24 3 views
2

Ceci est la suite de la précédente question stackoverflow jQuery j'ai demandé, mais je ne pense pas que la ligne qui dit:Activation événement en direct après est mort

$(".insert").live("click", insertHandler); 

travaille.

<!DOCTYPE HTML> 
<html> 
<head> 
<script src="http://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
function insertHandler(currentRow) { 
    var newRow = currentRow.clone(true); 
    newRow.children('td:last').empty().append('<input name="myid" />'); 
    currentRow.after(newRow); 
    document.myForm.myid.focus(); 
} 

function OnLoad() { 
    $('input[name="myid"]').live('focusout', function() { 
     var myValue = $(this).val(); 
     var currentCell = $(this).parents("td"); 
     currentCell.empty().append(myValue); 
     $(".insert").live("click", insertHandler); // I need help here 
    }); 
    $('.insert').live('click', function() { 
     $('.insert').die(); 
     var currentRow = $(this).parents("tr:first"); 
     insertHandler(currentRow); 
    }); 
    $('.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> 
<input name="Other"> 
</form> 
</body> 
</html> 

Je veux que l'utilisateur soit en mesure d'ajouter une nouvelle ligne, mais pas cliquez sur « Ajouter » encore et encore sans cesse. Avec votre aide, j'ai désactivé l'événement "Ajouter", mais maintenant j'ai de la difficulté à revenir en arrière.

Répondre

1

ne pas die, ont une variable à dire si insert est verrouillé;

var insertlocked = false; 

$('.insert').live('click', function() { 
     if (insertlocked){ return; } //if insert is locked, don't do nothing 
     insertlocked = true; //lock insert 
     //$('.insert').die(); - don't use this 
     var currentRow = $(this).parents("tr:first"); 
     insertHandler(currentRow); 
    }); 

function insertHandler(...){ 
    ... 
    document.myForm.myid.focus(); 
    insertlocked = false; //unlock insert again 
} 
1

insertHandler attend une ligne de table en tant que paramètre. Lorsque vous le réattachez de cette façon, il passera le TD en tant que paramètre. En outre, pourquoi avez-vous besoin live()? Il y a un peu de frais généraux de performance impliqués dans la délégation d'événements. Il n'est pas conseillé, sauf si vous devez attacher un gestionnaire à plusieurs éléments ou éléments créés dynamiquement dans le futur. Donc, il est logique pour $('input[name="myid"]').live('focusout',... mais pas pour Ajouter, Supprimer.