привязка после смерти, используя живой? - PullRequest
1 голос
/ 12 октября 2011

Я не хотел рифмовать!

Но мне нужна помощь.Я сделал несколько событий с использованием jquery, mouseenter, mouseleave и click.Если мышь входит в элемент, отображается другой элемент, а если мышь выходит, этот элемент исчезает.Если щелкнуть, элемент все еще отображается, а мышиный лист умирает.

Теперь, мой вопрос, как вы перепривязываете, как заставить этот элемент исчезать при повторном нажатии.

$('.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 ]

1 голос
/ 12 октября 2011

Вы можете оставить обработчик 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 голос
/ 12 октября 2011

Одним из способов было бы не называть die() во-первых.Вместо этого вы можете сохранить состояние "clicked" в документе data и скрыть элемент в обработчике mouseleave только в том случае, если это позволяет состояние "clicked".

EDIT: Исходя из требований вашего последнего комментария, похоже, что вы хотите, чтобы "щелкнутое" состояние сохранялось для каждого элемента, а не глобально (что означает, что 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"));
});
0 голосов
/ 12 октября 2011

Лично я бы не использовал die.Самый простой способ сделать это - просто установить флаг.Как только клик зарегистрирован, флаг будет истинным.Функция mouseleave имеет условное выражение для проверки, установлен ли флаг, и не будет скрывать, если флаг имеет значение true.В следующий раз, когда вы щелкнете мышью, снимите флажок и либо спрячьте его, либо оставьте указатель мыши работать.

...