Я работаю над небольшим количеством кода для проекта на работе, и я немного озадачен нюансом jQuery.В следующем коде он должен просмотреть мой список и повторить каждый элемент ввода текста с тем же общим именем, что и последний, но с одним номером выше в имени.Вместо этого он выполняет итерацию имени каждого элемента ввода текста с номером, превышающим последнее число, существовавшее при создании ссылки.Итак, это должно выглядеть как более сложная версия этого:
<input name="industry1" /> <a href="#" class="addField"></a> <!-- Clicked twice -->
<input name="industry2" /> <a href="#" class="addField"></a>
<input name="industry3" /> <a href="#" class="addField"></a>
... И вместо этого это выглядит так:
<input name="industry1" /> <a href="#" class="addField"></a> <!-- Clicked twice -->
<input name="industry2" /> <a href="#" class="addField"></a>
<input name="industry2" /> <a href="#" class="addField"></a>
Я думаю, проблема в том, чтоСтрока, которая выбирает значение для повторения, устанавливается, когда .live привязывается к новой ссылке добавления.Таким образом, если ссылка по первому полю создает кнопку по второму полю, а кнопка по третьему полю, она действует так, как если бы было только одно поле, потому что именно так было, когда .live связывал функцию с «щелчком мыши»." событие.Есть ли способ заставить селектор выяснить, что такое реальный $ ("form.wizard ul li.industry: last input [type = text]") в состоянии DOM при нажатии на элемент, а не когдаэто связано с элементом?
<script type="text/javascript">
$(function() {
$("a.addField").live("click", function(event) {
$(this).parents("li").clone().appendTo($("form.wizard > ul"))
.children("input[type=text]").val("").attr("name", function() {
return "industry" + (parseFloat($("form.wizard ul li.industry:last input[type=text]").attr("name").replace("industry", "")) + 1);
})
.after(function() {
if($(this).siblings(".removeField").length == 0) {
return "<a href='#' class='removeField'>Remove</a>"
}
})
.siblings("label").text("");
event.preventDefault();
});
$("a.removeField").live("click", function(event) {
$(this).parents("li").remove();
event.preventDefault();
});
});
</script>
<form action="#" method="post" class="wizard">
<ul>
<li>
<label>Your company name</label>
<input type="text" />
<div class="clear"></div>
</li>
<li class="industry">
<label>Your Industry</label>
<input type="text" name="industry1" />
<a href="#" class="addField left">Add</a>
<div class="clear"></div>
</li>
</ul>
</form>