2012-04-06 23 views
1

Meine Absicht ist für eine neue <input> Felder erstellt werden jedes Mal, wenn nur eine leere eins übrig ist - so wenn die oberste Fokus verliert. Dies geschieht, aber nur einmal (so nur drei <input> Felder jemals gemacht werden könnenjQuery append passiert nur einmal

Mein Arbeitsbeispiel bei http://sas98.user.srcf.net/guestlist/ unter Nummer 4.

Der Code ist:.

<div id="names"> 
<p><input class="input" type="text" name="name1" /></p> 
<p><input class="input" type="text" name="name2" /></p> 
</div> 

<script type="text/javascript"> 
$(document).ready(function() { 
var name = $("<p><input class='input' type='text' /></p>"); 
    $('.input').blur(function() { 
     if($(this).val().length>0) { 
      $('#names').append(name.clone()); 
     } 
    }); 
}); 
</script> 

EDIT:

  $('#names').append(name); 

zu

Changed
 $('#names').append(name.clone()); 

Lässt es ein paar Mal arbeiten, bevor Sie stecken bleiben. Es scheint temperamentvoll - ich kann kein Muster dafür sehen.

Antwort

2

Das Problem ist der Event-Handler nicht aktualisiert wird. für JQuery < 1.7 Verwendung $ .live() verschwimmen zu binden, auf neuere Versionen verwenden .on $()

+0

wo würde ich $ .on() hier hinzufügen? – Sebastian

+0

http://jsfiddle.net/YFJA6/1/ – worenga

0

Dies liegt daran, dass Sie den .blur() --Handler nur einmal hinzufügen (bevor die neuen Eingaben erstellt werden), sodass der neuesten Eingabe auch ein Handler für das Blur-Ereignis zugewiesen werden muss.

Interesse Sake, versuchen:

<div id="names"> 
<p><input class="input" type="text" name="name1" /></p> 
<p><input class="input" type="text" name="name2" /></p> 
</div> 

<script type="text/javascript"> 
$(document).ready(function() {  
    $('.input').blur(addBlur()); 
}); 
function addBlur() { 
     var name = $("<p><input class='input' type='text' /></p>"); 
     if($(this).val().length>0) { 
      var newBox = name.clone(); 
      newBox.blur(addBlur()); 
      $('#names').append(name.clone()); 
     } 
    } 
</script> 
+0

danke für Ihre Antwort. Wohin würde der zweite Hundeführer gehen? – Sebastian

+0

siehe aktualisierte Antwort – hofnarwillie

+0

Wenn ich es versuchte, das Skript hat nicht funktioniert Ich habe Angst – Sebastian

1

Dies funktioniert wie du, ich denke wollen: http://jsfiddle.net/YFJA6/

$('#names').on({ 
blur: function() { 
    if($(this).val().length>0) { 
     $('#names').append('<p><input class="input" type="text" /></p>'); 
    } 
} 
}, 'input'); 
+0

Ja, das ist ein anderes logisches Problem - könnte durch alle Eingaben durchlaufen - überprüfen Sie val() und stellen Sie sicher, dass Sie keine leeren haben - um übermäßige leere Eingaben zu vermeiden. Ich habe nur die Logik verlassen, mit der sie begonnen haben. – mikevoermans

+0

Das wäre perfekt, wie wird das gemacht? – Sebastian

+1

es ist nicht perfekt, da Sie den ersten beiden Feldern eine Eingabe hinzufügen und zwischen ihnen wechseln können, und es fügt neue Felder hinzu. Siehe http://jsfiddle.net/YFJA6/1/ für die Fehlerbehebung – worenga

1

dies für mich gearbeitet:

$('#selector').append(htmlcontent.clone(true));

Verwandte Themen