我的意思并不是押韵!
但我需要帮助。我用jquery,mouseenter,mouseleave和click做了一些实时函数事件。如果mouseenter一个元素,则显示另一个元素,如果mouseleaves,则该元素消失。如果单击,则仍会显示该元素,并且mouseleaves将会死亡。
现在,我的问题是,如何重新点击再次点击时该元素的消失方式。
$('.block').live("mouseenter",function(){
var id= $(this).attr('id');
$('#arrowPreview'+id).show();
}).live("mouseleave",function(){
var id= $(this).attr('id');
$('#arrowPreview'+id).hide();
}).live("click",function(){
var id= $(this).attr('id');
$('#arrowPreview'+id).show();
$('.block').die("mouseleave");
});
到目前为止我的剧本。谢谢!
答案 0 :(得分:1)
您可以将mouseleave
处理程序保留在单击的元素上,而是在单击时更改附加到该元素的一条状态信息,这样您就知道mouseleave
事件不应执行任何操作。
var blocks = $('.block');
blocks.live("mouseenter",function(){
var id = $(this).attr('id');
$('#arrowPreview'+id).show();
}).live("mouseleave",function(){
var obj = $(this);
if (!obj.data('inactive')) {
var id = obj.attr('id');
$('#arrowPreview'+id).hide();
}
}).live("click",function(){
var obj = $(this);
var id = obj.attr('id');
$('#arrowPreview'+id).show();
obj.data('inactive', !obj.data('inactive'));
});
答案 1 :(得分:1)
一种方法是不首先调用die()
。相反,您可以将“已点击”状态存储在文档的data中,并且只有在“{1}}处理程序允许的情况下才会隐藏该元素。
编辑:根据您最新评论中的要求,您似乎希望为每个元素而不是全局维护“点击”状态(这意味着mouseleave
不是首先要走的路,因为它全局解除了处理程序。)
以下代码有望满足您的要求:
die()
答案 2 :(得分:0)
我个人不会用死。简单的方法是设置一个标志。一旦点击登记,标志为真。 mouseleave函数有一个条件来检查是否设置了标志,如果标志为真则不会隐藏。下次单击时,取消设置标志并立即隐藏它或让mouseleave执行它的操作。