我有这个简单的HTML代码:
<div id="new_gallery">
<p id="add_gallery">Add new gallery</p>
</div>
和jQuery代码:
<script>
$("#add_gallery").click(function() {
$("#new_gallery").append('<input name"new_gallery" /><a href="#" id="create_new_gallery">Add</a>');
$(this).remove();
});
$("#create_new_gallery").on('click', function(){
alert('1');
});
</script>
第一个功能正在运行,但第二个功能不正常。我需要创建新的input
元素,通过ajax发送数据,然后删除input
元素并再次附加p
元素。我怎么能这样做?
答案 0 :(得分:5)
当第二个语句运行时,元素#create_new_gallery
尚不存在,因此它什么都不做。
例如,在创建元素后可以对click事件进行绑定,这可以确保元素存在于DOM中:
$("#add_gallery").click(function() {
$("#new_gallery").append('<input name="new_gallery" /><a href="#" id="create_new_gallery">Add</a>');
$(this).remove();
$("#create_new_gallery").on('click', function() {
alert('1');
});
});
<强> DEMO 强>
这是一个更优化的版本。附加一个元素并且必须重新查询它是没有意义的(事件虽然通过id查询是最快的方法。此外,它最好使用jQuery的链接功能:< / p>
$("#add_gallery").click(function() {
var $gallery = $("#new_gallery");
$('<input name="new_gallery" />').appendTo($gallery);
$('<a href="#" id="create_new_gallery">Add</a>')
.on('click', function() {
alert('1');
})
.appendTo($gallery);
$(this).remove();
});
<强> DEMO 强>
答案 1 :(得分:2)
#create_new_gallery
不存在。
以下是您的代码应该是什么样的:
$("#add_gallery").click(function() {
var newG = $("#new_gallery");
$('<input name"new_gallery" />').appendTo(newG);
$('<a href="#" id="create_new_gallery">Add</a>').appendTo(newG).on('click',
function() {
alert('1');
});
$(this).remove();
});
请注意,将$("#new_gallery")
放入变量可以避免两次查找。
答案 2 :(得分:1)
$(document).ready(function () {
$("#add_gallery").click(function() {
$("#new_gallery").append('<input name"new_gallery" /><a href="#" id="create_new_gallery">Add</a>');
$(this).remove();
$("#create_new_gallery").on('click', function(){
alert('1');
});
});
});
答案 3 :(得分:-1)
尝试使用live
来处理为页面加载后添加的元素触发的事件。
$("#create_new_gallery").live('click', function(){
alert('1');
});