我的代码遇到了很多麻烦。这是一个由Django后端提供的模板。
{% load staticfiles %}
<html>
<head>
{% csrf_token %}
<title>Tempo</title>
<link rel="stylesheet" type="text/css" href="{% static "css/styles.css" %}">
<link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}">
</head>
<body>
<div id="header">
<img id="logo" src="{% static "img/logo_wt.svg" %}"/>
</div>
{% csrf_token %}
<form id="myform" action="/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="csvFile" id='csv'>
<input type="submit" value="Submit">
</form>
<button class='firebutton'>Add buttons</button>
<div class="fucking">{% autoescape off %}{{ data }}{% endautoescape %}</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="http://johnny.github.io/jquery-sortable/js/jquery-sortable.js"></script>
<script src="{% static "js/jquery-sortable.js" %}"></script>
<script>
$(document).ready(function(){
$('td').on('click', function(){
$(this).attr('contenteditable','true');
})
$('.firebutton').on('click', function(){
$('tbody').find('tr').each(function(){
$(this).append('<button type="button" id="remove" class="btn btn-default btn-lg good">' +
'<span class="glyphicon glyphicon-minus" aria-hidden="true"></span>' +
'</button>')
})
})
$('#remove').on('click', function(){
console.log("button clicked")
})
})
</script>
</body>
</html>
POST
我的应用程序以html table
回复。然后会发生什么呢?如果有人点击.firebutton
我会在表格的每一行添加一个按钮,但标题除外。现在我想要做的是添加删除行的功能。我通过为每个新添加的按钮点击一个console.log来测试这个,但这不起作用。如果我把它放在.firebutton
监听器的回调中,那么它可以工作,但只有一次。有谁知道这里发生了什么?
答案 0 :(得分:5)
当您动态加载内容时,新创建的DOM元素不会附加事件,您必须从动态创建的元素或文档中委派事件:
$(document).on('click', '.firebutton', function() {
这样,您将事件附加到document
而不是.firebutton
元素,文档将委托事件到其范围内的每个.firebutton
元素。
我建议不要从document
委派,而是使用更接近的非动态父元素,这是因为性能。委托人越接近他们的孩子,jQuery就越快找到它而不评估整个DOM。
答案 1 :(得分:1)
查看函数jQuery.on()
。在jQuery(document).ready({ your stuff here });
之后将对象添加到DOM时,他们将不会收听.click侦听器。一个基本的例子:
jQuery('.parentDiv').on('click', '.yourRow', function(){
// Do whatever you like here
});