使用直播后绑定回来?

时间:2011-10-12 04:34:10

标签: jquery function binding click mouseevent

我的意思并不是押韵!

但我需要帮助。我用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");
    });

到目前为止我的剧本。谢谢!

3 个答案:

答案 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'));
});

现场演示:http://jsfiddle.net/D9zaK/5/

答案 1 :(得分:1)

一种方法是不首先调用die()。相反,您可以将“已点击”状态存储在文档的data中,并且只有在“{1}}处理程序允许的情况下才会隐藏该元素。

编辑:根据您最新评论中的要求,您似乎希望为每个元素而不是全局维护“点击”状态(这意味着mouseleave不是首先要走的路,因为它全局解除了处理程序。)

以下代码有望满足您的要求:

die()

答案 2 :(得分:0)

我个人不会用死。简单的方法是设置一个标志。一旦点击登记,标志为真。 mouseleave函数有一个条件来检查是否设置了标志,如果标志为真则不会隐藏。下次单击时,取消设置标志并立即隐藏它或让mouseleave执行它的操作。

相关问题