2 Stimmen

Aktivieren eines Live-Ereignisses, nachdem es gestorben ist

Dies ist eine Fortsetzung von der vorherigen Stackoverflow jQuery Frage, die ich fragte, aber ich glaube nicht, dass die Zeile, die sagt:

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

funktioniert.

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

Ich möchte, dass der Benutzer eine neue Zeile hinzufügen kann, aber nicht immer wieder auf "Hinzufügen" klicken muss.

Mit Ihrer Hilfe habe ich das Ereignis "Hinzufügen" deaktiviert, aber jetzt habe ich Probleme, es wieder zu aktivieren.

1voto

Chetan S Punkte 23115

insertHandler erwartet eine Tabellenzeile als Parameter. Wenn Sie es auf diese Weise neu anhängen, wird es die TD als Parameter.

Außerdem, warum brauchen Sie live() ? Die Delegation von Ereignissen ist mit einem gewissen Leistungs-Overhead verbunden. Es ist nicht ratsam, es sei denn, Sie müssen einen Handler an mehrere Elemente oder Elemente, die in Zukunft dynamisch erstellt werden, anhängen. Es macht also Sinn für $('input[name="myid"]').live('focusout',... aber nicht für Hinzufügen, Löschen.

1voto

Adam Kiss Punkte 11591

Nicht die eine Variable haben, mit der man feststellen kann, ob der Einsatz gesperrt ist;

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
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X