我有一个简短的jQuery问题:
首先,我的HTML:
<div id="taskinput">
<form>
<input id="taskinput-box" type="text"></input>
<input type="submit"></input>
</form>
</div><!-- end taskinput -->
<div id="taskoutput"></div><!-- end taskoutput -->在创建新类.task的同时,我使用.append在#taskoutput from user中创建了内容。
$("#taskinput").submit(function() {
var tasktext = $('#taskinput-box').val()
$('#taskoutput').append('<div class="task">'+tasktext+'</div>');
$('#taskinput-box').val("");
return false;
});上面的代码运行得很好;当我尝试选择创建的div时,问题就出现了。以下代码不起作用:
$(".task").click(function() {
$(this).slideUp();
});我遗漏了什么?
发布于 2012-05-23 08:48:08
您必须使用与on类似的delegate event
$('#taskoutput').on('click', '.task', function(){
$(this).slideUp();
});@salek ,但使用on
阅读on docs
事件处理程序仅绑定到当前选定的元素;当您的代码调用.on()时,它们必须存在于页面上。若要确保元素存在并且可以选择,请在文档就绪处理程序内为页面上HTML标记中的元素执行事件绑定。如果要将新的HTML注入到页面中,请在将新的HTML放入页面后选择元素并附加事件处理程序。或者,使用委托事件附加事件处理程序,如下所述。
Delegated events的优势在于,它们可以处理稍后添加到文档中的后代元素中的事件。通过选取在附加委托事件处理程序时保证存在的元素,可以使用委托事件来避免频繁附加和移除事件处理程序。例如,此元素可以是Model- view -Controller设计中的视图的容器元素,或者,如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。在加载任何其他超文本标记语言之前,document元素在文档头中可用,因此可以安全地在那里附加事件,而无需等待文档准备就绪。
发布于 2012-05-23 08:50:24
$(".task").click(...说:“找到当前存在的所有.task元素,并将事件处理程序绑定到它们。如果元素是稍后创建的,如您的示例所示,它们将不会绑定事件处理程序。
您需要将事件处理程序绑定到始终存在的元素。由于祖先元素会被通知其后代上的事件,因此单击.task元素将始终触发#taskoutput上的click处理程序。jQuery的on方法让这一切变得简单:
$('#taskoutput').on('click', '.task', function(){
$(this).slideUp();
});发布于 2012-05-23 08:47:47
使用jquery绑定在运行时生成的.on()上的事件。如下所示:
$("#taskoutput").on({
click: function() { $(this).slideUp(); }
}, '.task');https://stackoverflow.com/questions/10712051
复制相似问题