2015-10-09 2 views
0

Я пытаюсь создать форму счета, которая автоматически создает следующее поле ввода, когда последний созданный вход получает фокус, например. вставляется в.JQuery автоматически добавляет новый вход, предотвращает предыдущие

У меня есть основная функциональность, которую я хочу, но с одной проблемой. Я только хочу добавить новое поле, когда только очень последний вход получает фокус, но в настоящее время он все еще добавляет новое поле, если в любом из предыдущих поле получает фокус.

Моя мысль заключалась в том, чтобы добавить новый класс в последнее поле, а затем удалить его при добавлении следующего ввода, но потому, что я использую функцию делегата на #invoice, которая не имеет желаемого эффекта.

jFiddle here

$(function() { 
var wrapper = $(".clone_services"); //Input wrapper 
var x = 1; //initial index count 
    $('#invoice').on('focus', '.clone_services', function(){ 
     $('.new').focus(function(){ //on add input button click 
     $(this).removeClass('new'); 
     $(wrapper).append('<br><input type="text" class="services new" name="services['+ x +']"/>'); 
     }); 
    }); 

});

ответ

1

Пожалуйста, обратите внимание на обновленной скрипке:

https://jsfiddle.net/rea0edeh/3/

Там нет необходимости добавлять focus события 2-х элементы. Достаточно одного.

$(function() { 
    var wrapper = $(".clone_services"); //Input wrapper 
    var x = 1; //initial index count 
     $('.clone_services').on('focus','.new' , function(){ 
      $(this).removeClass('new'); 
      $(wrapper).append('<br><input type="text" class="services new" name="services['+ x +']"/>'); 
      x++; 
      }); 

}); 
+0

Ahh. Теперь я вижу свою ошибку. Это именно то, чего я хотел. – skribe

1

Как об этом:

$(document).on('focus', '.clone_services > .new', function() { 
    var $line = $(this).clone(); 
    $(this).removeClass('new').closest('.clone_services').append($line); 
}); 

https://jsfiddle.net/rea0edeh/4/

Вы можете комбинировать его с

$(document).on('blur', '.clone_services > *', function() { 
    if ($.trim($(this).val()) === "") $(this).remove(); 
}); 

https://jsfiddle.net/rea0edeh/5/

+0

Это очень приятно. Я не совсем понимаю, как это работает. Что делает эта '.clone_services> .new'' часть? – skribe

+0

Ничего. Я не признавал это как селектор. Я думал, что это больше, чем символ. – skribe

+0

@skribe Я должен спросить об этом: у вас есть два ответа, которые помогут вам и избежать никого из них ... В чем причина? – Tomalak

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