Добро пожаловать в JQuery! Это общая проблема. Проблема вызвана тем, что новый элемент .buttonPlus
не существует в то время, когда вы впервые связываете событие click
с .buttonPlus
. При первом связывании события click
оно будет привязано только к элементам, уже существующим на странице. Это вся причина, по которой вы заключаете весь код в $(function())
- он гарантирует, что он не будет работать, пока не будут созданы все элементы DOM.
Есть несколько разных решений. Самый простой способ - использовать метод jQuery .live()
, как предлагает Райан. Это автоматически связывает указанное событие click
с любыми новыми .buttonPlus
элементами, которые создаются.
Однако, хотя это простейшее решение, оно также очень затратно для вычислений. Я не буду вдаваться в подробности здесь, но использование .live()
почти никогда не является лучшим вариантом. Существует аналогичный метод jQuery под названием .delegate()
, который можно использовать вместо этого. Однако, хотя .delegate()
дешевле, чем .live()
, в вашем случае это не лучшее решение.
Лучшее решение, как намекает Диодей, - это «заново связать эти элементы, когда они будут добавлены». Вы можете сделать это следующим образом:
function btnClickEvent(btn){
btn.remove(".buttonPlus");
$(".buttonMinus").show();
$("#p1").append("<p id='p2'>Question: <input type='text'><button type='button' class='buttonPlus'></button></p>");
alert("Welcome " + $(".ttt").val() + "!");
//Re-binding
var newBtn = $("#p1").find('.buttonPlus:last');
newBtn.click(function(){
btnClickEvent(newBtn);
});
}
$(function(){
$(".buttonMinus").hide();
$(".buttonPlus").click(function(){
btnClickEvent($(this));
});
$(".buttonMinus").click(function (event) {
alert("You have pressed the DELETE button!");
});
}
Как видите, все, что мы делаем, - это помещаем код, который запускается в событии click
, в отдельную функцию. Это позволяет нам легко привязать его к новой кнопке. Возможно, вы захотите сделать то же самое со своими кнопками минус.