В JQuery, я использую кнопки для создания элементов, а затем ссылающиеся на кнопку щелкнула с помощью this
. Например:
$(".addphoto").click(function(){
photo_count++;
$(this).parent().before("<label>Add Photo: <input type='file' name='photo[" + photo_count + "]'></label>");
});
Я хотел сделать то же самое с кнопкой, созданной скриптом, но поскольку jQuery может использовать только те .on()
которые существовали при загрузке, я нацелил document
и использовал .on()
вместо:
$(document).on("click", ".addphoto", function(){
photo_count++;
$(this).parent().before("<label>Add Photo: <input type='file' name='photo[" + photo_count + "]'></label>");
});
Проблема в том, что теперь this
относится к document
а не к кнопке, которая была просто нажата. Как я могу ссылаться на эту кнопку?
Попробуйте использовать .live()
вместо метода .click()
.
Ссылка Ссылка для живого метода.
Изменение: добавлю краткое описание.
.live()
привязывает обработчик событий для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.
Вместо $(this)
передайте свое событие и ссылку $(e.currentTarget)
.
$(document).on("click", ".addphoto", function(e){
photo_count++;
$(e.currentTarget).parent().before("<label>Add Photo: <input type='file' name='photo[" + photo_count + "]'></label>");
});
Если вы укажете исходную кнопку ID, вы можете ссылаться на нее с помощью функции.click().
HTML
<div class="x">
<div>
<button class="addphoto" id="addPhotoButton">addphoto</button>
</div>
</div>
Javascript (JQuery)
var photo_count = 0;
$('#addPhotoButton').click(function () {
photo_count++;
$(this).parent().before("<div><label>Add Photo: <input type='file' name='photo[" + photo_count + "]' id='addPhotoID_"+photo_count+"'></label></div>");
});
URL JSfiddle: http://jsfiddle.net/PLk2G/5/
this
все еще относится к нажатой кнопке