Javascript jQuery:anywayto";刷新“;事件处理程序?
我有两个潜水舱,一个装着一些东西,另一个装着所有可能的东西。单击其中一个div将项目转移到另一个div。我得到的代码是:Javascript jQuery:anywayto";刷新“;事件处理程序?,javascript,jquery,Javascript,Jquery,我有两个潜水舱,一个装着一些东西,另一个装着所有可能的东西。单击其中一个div将项目转移到另一个div。我得到的代码是: $("#holder > *").each(function() { $(this).click(function(e) { $(this).remove(); $("#bucket").append(this); }); }); $("#bucket > *").each(function() { $(t
$("#holder > *").each(function() {
$(this).click(function(e) {
$(this).remove();
$("#bucket").append(this);
});
});
$("#bucket > *").each(function() {
$(this).click(function(e) {
$(this).remove();
$("#holder").append(this);
});
});
这一个工作得很好,除了在附加或删除元素后需要刷新事件处理程序。我的意思是,如果我第一次点击一个元素,它会被添加到另一个div中,但是如果我再次点击这个元素,什么都不会发生。我可以手动执行此操作,但是否有更好的方法来实现此操作?试试。。$.live(eventname,function)将绑定到任何当前匹配的元素以及将来通过javascript操作添加到Dom中的元素
例如:
$("#holder > *").live("click", function(e) {
$(this).remove();
$("#bucket").append(this);
});
$("#bucket > *").live("click", function(e) {
$(this).remove();
$("#holder").append(this);
});
重要提示:
请注意,$.live
已经从jQuery(1.9版以后)中剥离出来,您应该改用它
我建议您参考更新的示例 您看过jQuery的函数了吗?编辑:不要使用live,它可能会被弃用 利用事件泡沫这一事实。使用()上的
.on
:
单击任何元素(无论是否在绑定时存在)都将冒泡(假设您没有手动捕获事件并停止传播)。因此,您可以使用该
事件委托
仅绑定两个事件,每个容器上一个。通过第二个参数的选择器测试的每次单击(在本例中,*
)都将删除该元素,然后将其附加到备用容器中,如things.eq(Number(!index))
所述,使用更直观的:
首先,
live
已被弃用。其次,刷新不是您想要的。您只需将单击处理程序附加到正确的源,在本例中为文档
当你这样做的时候
$(document).on('click', <id or class of element>, <function>);
$(文档)。在('click',)上;
单击处理程序附加到文档。加载页面时,单击处理程序附加到元素的特定实例。重新加载页面时,该特定实例消失,因此处理程序不会注册任何单击。但页面保持不变,因此,将单击处理程序附加到文档。简单易行。最简单的方法是有效方法(不要为所有元素加载所有事件)it:
实际上不会。除非你想在元素添加到DOM时取消绑定/重新绑定。我想你是说.live('click',function(){我的理解是绑定不适用于将来的项目,而只适用于当前匹配给定选择器的元素[引用自jQuery中的
live
文档]:此新元素也与选择器.clickme匹配,但由于它是在调用.bind()之后添加的,因此单击它将不起任何作用。"我的意思是说。现场直播,sry因为混乱-我正在接我的女朋友,急急忙忙在我的手机上输入,然后按habbit的要求输入bind,lol@John:谢谢你的回复。我不确定我是否丢失了,但是当我用这个替换我的代码时,什么都没有发生。我正在使用jQuery-1.4.2。我是否遗漏了什么?我的意思是,即使是最初的偶数ts不起作用。这不起作用。jQuery.fn.live
需要一个选择器来使用…它不能使用$(This)
…我想是的。我知道“This”会把事情搞砸。好的,我已经更正了解决方案,让它正常工作。很抱歉,好的。我想,它不是$(“\35; holder>*”)。每个
,只需删除该行并用$(“#holder>*”)替换$(此)
)在第二行中完成了这个技巧。谢谢John和J-P。@J-P:Ahh…刚刚接受了John的解决方案。+1的帮助。出于好奇,使用委托比使用live有什么好处吗?@Legend,是的,它更快,因为它不需要你先冗余地选择#header>*
和#bucket>*
。@J-P:有道理。谢谢你的解释。.delegate()
在这里确实更快,这只是jQuery 1.3用户首先想到.live()
的一个习惯(甚至是.livequery()
插件,如果是早期的话)live
已经被否决了这是最好的答案,应该是被接受的:)非常感谢
var holder = $('#holder'),
bucket = $('#bucket');
holder.delegate('*', 'click', function(e) {
$(this).remove();
bucket.append(this);
});
bucket.delegate('*', 'click', function(e) {
$(this).remove();
holder.append(this);
});
$(document).on('click', <id or class of element>, <function>);
//NORMAL FUNCTION
function myfunction_click(){
//custom action
}
$('id_or_class_of_element').on('click', myfunction_click);
//LOAD OR REFRESH EVENT
$(document).on('click', 'id_or_class_of_element', myfunction_click);