Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:anywayto";刷新“;事件处理程序?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery:anywayto";刷新“;事件处理程序?

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

我有两个潜水舱,一个装着一些东西,另一个装着所有可能的东西。单击其中一个div将项目转移到另一个div。我得到的代码是:

$("#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);