我听说JQuery .live已被弃用,不应再使用了。我在下面有一些示例代码,我写了一个按钮,其id为adddiv,它将id为seconddiv的div附加到id为firstdiv的现有div。
在seconddiv中,我有另一个ID为delete的按钮,当点击时,我想删除seconddiv。代码工作正常,但是如果我更改JQuery,我正在捕获click按钮的click事件以使用.on或.bind,它就无法工作。
任何人都可以告诉我如何更改此选项以使用.on或.bind来实现此功能吗?
HTML:
<div id="firstdiv">
Pre Existing Div
<input type="button" id="adddiv" value="Add Div" />
</div>
使用Javascript:
<script type="text/javascript">
$().ready(function () {
$('#adddiv').click(function () {
$('#firstdiv').append('<div id="seconddiv"> Click here to delete the second div: <input type="button" id="delete" value="Delete Div"></div>')
});
$('#delete').live('click', function (e) {
$(this).parent('#seconddiv').remove();
});
});
</script>
答案 0 :(得分:4)
jQuery's .on()
设置如下:
.on( events [, selector ] [, data ], handler(eventObject) )
。
基本上,您需要将其绑定到已存在的选择器,因此对于此示例,您可以使用以下选择器:
$(document).on()
$('body').on()
$('#firstdiv').on()
接下来,指定event
:
$(document).on('click')
$('body').on('click')
$('#firstdiv').on('click')
注意:如果要绑定多个事件,请在事件之间添加空格:
$(document).on('click mouseover')
样本: http://jsfiddle.net/dirtyd77/uBuH7/1/
然后,你说哪些元素触发事件:
$(document).on('click', '#delete')
$('body').on('click', '#delete')
$('#firstdiv').on('click', '#delete')
注意:如果要绑定多个元素,请使用逗号:
$(document).on('click', '#delete, #delete2')
DEMO:http://jsfiddle.net/dirtyd77/uBuH7/2/
最后,添加一个处理程序:
$(document).on('click', '#delete', function(){ })
$('body').on('click', '#delete', function(){ })
$('#firstdiv').on('click', '#delete', function(){ })
JAVASCRIPT:
$().ready(function () {
$('#adddiv').click(function () {
$('#firstdiv').append('<div id="seconddiv"> Click here to delete the second div: <input type="button" id="delete" value="Delete Div"></div>')
});
$(document).on('click', '#delete', function(e) {
$(this).parent('#seconddiv').remove();
});
});
答案 1 :(得分:0)
<script type="text/javascript">
$().ready(function () {
$('#adddiv').click(function () {
$('#firstdiv').append('<div id="seconddiv"> Click here to delete the second div: <input type="button" id="delete" value="Delete Div"></div>')
});
$('body').on('click', '#delete', function (e) {
$(this).parent('#seconddiv').remove();
});
});
</script>
在on
事件中,我将body
作为事件处理程序,这可以是任何元素,只要它为您将调用的元素提供父项,在您的情况下{{1} }。用于事件处理程序的DOM树越远,冒泡效果就越大。
在选择事件处理程序时要记住的一件事是,您必须确保它在DOM中可用,因此在这种情况下,使用#delete
作为事件处理程序始终是安全的
请参阅jQuery $(document)
文档here
答案 2 :(得分:0)
我想改变一些事情:
<script type="text/javascript">
// Event handler to delete a second div
var onDelete = function (e) {
$(this).closest('#seconddiv').remove();
};
// Event handler to add a second div
var onAdd = function () {
// create div
var div = $('<div/>', {
id: 'seconDiv',
text: 'Click here to delete the second div:'
});
// create button
var button = $('<input/>', {
id: 'delete',
type: 'button',
value: 'Delete Div'
});
// wrap them together and append
div.append(button).appendTo('#firstDiv');
};
// Event binding .on(event, selector, handler)
$(document).on('click', '#addiv', onAdd);
$(document).on('click', '#delete', onDelete);
</script>
.on()
时,只要绑定事件时DOM中存在第一个选择器,就不需要$().ready()
。因此$(document)
选择器。简化代码。.on()
,请尝试坚持使用它。同时使用.on('click'..)
和.click()
会让人感到麻烦和混乱。 .closest()
代替.parent()
可以在不破坏代码的情况下进行小的html更改。.on()
代替弃用的.live()
是一个好主意。