2012-04-06 2 views
1

Мое намерение состоит в создании новых полей <input>, которые будут создаваться каждый раз, когда остается только один пустой - так, когда верхняя часть теряет фокус. Это происходит, но только один раз (так что только три <input> поля могут либо бытьjQuery append происходит только один раз

Мой рабочий пример на http://sas98.user.srcf.net/guestlist/ под номером 4.

Код:.

<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); 

Изменен

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

Заставляет его работать еще пару раз, прежде чем застрять. Кажется, темпераментный - я не вижу в этом картины.

ответ

2

Проблема заключается в обработчик события не обновляется. для Jquery < 1,7 использования $ .live(), чтобы связать размытость, на более новых версиях используйте $ .он()

+0

, где бы я добавил $ .on() здесь? – Sebastian

+0

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

0

Это связано с тем, что вы добавляете обработчик .blur() только один раз (до создания новых входов), поэтому для самого нового входа должен быть назначен обработчик события размытия.

Ради интереса, попробуйте:

<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

благодарит за ваш ответ. куда будет идти второй обработчик? – Sebastian

+0

см. Обновленный ответ – hofnarwillie

+0

Когда я попробовал, скрипт не работал. Я боюсь – Sebastian

1

Это работает, как вы хотите, я думаю: http://jsfiddle.net/YFJA6/

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

Да, это другая логическая проблема - может проходить через все входы - проверять val() и убедиться, что у вас нет пустых - чтобы не добавлять лишние пустые входы. Я просто оставил логику, с которой они начали. – mikevoermans

+0

Это было бы прекрасно, как это сделать? – Sebastian

+1

его не идеально, так как вы можете добавлять входные данные в первые два поля и переключаться между ними, и он продолжает добавлять новые поля. см. http://jsfiddle.net/YFJA6/1/ для исправления – worenga

1

это работает для меня:

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

Смежные вопросы