使用live死后绑定回来?

发布于 2024-12-09 03:21:19 字数 627 浏览 0 评论 0原文

我不是故意要押韵的!

但我需要帮助。我用 jquery、mouseenter、mouseleave 和 click 完成了一些实时功能事件。如果鼠标进入一个元素,则另一个元素会显示,如果鼠标离开,该元素就会消失。如果单击,该元素仍会显示,并且 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");
    });

到目前为止,这就是我的剧本。谢谢!

I didn't mean it to rhyme!

But I need help. I have done some live function events with jquery, mouseenter, mouseleave, and click. If mouseenter an element, another element shows, and if mouseleaves, that element disappears. If clicked, the element is still shown, and mouseleaves dies.

Now, my question is, how do you rebind how make that element disappear when you click again.

$('.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");
    });

Thats my script so far. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡看悲欢离合 2024-12-16 03:21:19

您可以将 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/

You could keep the mouseleave handler on the clicked element, and instead change a piece of state information attached to the element when it is clicked so you know that the mouseleave event should perform no action.

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

Live demo: http://jsfiddle.net/D9zaK/5/

余厌 2024-12-16 03:21:19

一种方法是首先不调用die()。相反,您可以将“单击”状态存储在文档的 data 中,并且仅隐藏 < 中的元素code>mouseleave 处理程序(如果“单击”状态允许)。

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

以下代码希望能够满足您的要求:

$(".block").live("mouseenter", function() {
    var $arrow = $("#arrowPreview" + this.id);
    if (!$arrow.data("freeze")) {
        $arrow.show();
    }
}).live("mouseleave", function() {
    var $arrow = $("#arrowPreview" + this.id);
    if (!$arrow.data("freeze")) {
        $arrow.hide();
    }
}).live("click", function() {
    var $arrow = $("#arrowPreview" + this.id);
    $arrow.data("freeze", !$arrow.data("freeze"));
});

One way would be not to call die() in the first place. Instead, you can store the "clicked" state in the document's data and only hide the element in your mouseleave handler if the "clicked" state allows it.

EDIT: From the requirements in your latest comment, it looks like you want the "clicked" state to be maintained for each element instead of globally (which means die() wasn't the way to go in the first place, because it unbinds the handler globally).

The following code hopefully fulfills your requirements:

$(".block").live("mouseenter", function() {
    var $arrow = $("#arrowPreview" + this.id);
    if (!$arrow.data("freeze")) {
        $arrow.show();
    }
}).live("mouseleave", function() {
    var $arrow = $("#arrowPreview" + this.id);
    if (!$arrow.data("freeze")) {
        $arrow.hide();
    }
}).live("click", function() {
    var $arrow = $("#arrowPreview" + this.id);
    $arrow.data("freeze", !$arrow.data("freeze"));
});
云巢 2024-12-16 03:21:19

我个人不会使用die。最简单的方法就是设置一个标志。一旦注册了点击,flag 就为 true。 mouseleave 函数有一个条件来检查标志是否设置,如果标志为 true,则不会隐藏。下次单击时,取消设置该标志并立即隐藏它或让 mouseleave 完成它的工作。

I personally wouldn't use die. The easy way to do it is to just set a flag. Once click is registered, flag is true. mouseleave function has a conditional to check if flag is set, and will not hide if the flag is true. Next time you click, unset the flag and either hide it right away or let mouseleave do its thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文