我有一个<div>用id="modal"jQuery load()方法动态生成的with :
<div>
id="modal"
load()
$('#modal').load('handlers/word.edit.php');
word.edit.php包含一些输入元素,它们被加载到modal中<div>。
word.edit.php
使用jQuery的keyup方法,我可以在事件触发后捕获输入值,但是当将元素动态添加到模式div时,当用户输入文本时事件不会触发。
keyup
哪种jQuery方法支持处理由动态创建的元素触发的事件?
用于创建新输入元素的代码为:
$('#add').click(function() { $('<input id="'+i+'" type="text" name="translations' + i + '" />') .appendTo('#modal');
捕获用户值的代码是:
$('input').keyup(function() { handler = $(this).val(); name = $(this).attr('name');
第二个代码块似乎适用于原始元素,但不会由新的动态生成的元素触发。
你需要将事件委托给页面内最接近的静态祖先元素。这只是意味着,绑定事件处理程序的元素在绑定处理程序时必须已经存在,因此对于动态生成的元素,你必须允许事件冒泡并进一步处理。
jQuery .on方法是执行此操作的方法(或.delegate对于较旧版本的jQuery。)
jQuery .on
.delegate
// If version 1.7 or above $('#modal').on('keyup', 'input', function() { handler = $(this).val(); name = $(this).attr('name'); });
或旧版本
// If version 1.6 or below // note the selector and event are in a different order than above $('#modal').delegate('input', 'keyup', function() { handler = $(this).val(); name = $(this).attr('name'); });