не удается отвязать мышь при нажатии

#jquery #binding #click #mouseevent

#jquery #привязка #нажмите #mouseevent

Вопрос:

У меня есть скрипт jquery, в котором при наведении курсора мыши и элемента что-то отображается и исчезает при оставлении мыши. Я пытаюсь отвязать оставление мыши при нажатии пользователем, чтобы «что-то» оставалось показанным, когда пользователь уходит. Это правильный способ сделать это? Если да, может кто-нибудь помочь мне заставить этот скрипт работать?

Спасибо!

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

Спасибо!

Комментарии:

1. Вы должны использовать die() для отвязки обработчиков событий в реальном времени

Ответ №1:

Вам необходимо создать функции для выполнения событий в качестве переменных, чтобы обеспечить целостность вашего javascript, поэтому для вашего примера:

 var fShow = function(){
    var id= $(this).attr('id');
    $('#arrowPreview' id).show();
};

var fHide = function(){
    var id= $(this).attr('id');
    $('#arrowPreview' id).hide();
};

var fClick = function(){        
    var id= $(this).attr('id');
    $('#arrowPreview' id).show();
};

$('.block').bind('mouseenter',fShow);
$('.block').bind('mouseleave',fHide);
$('.block').unbind('mouseleave',fHide);
  

Комментарии:

1. я считаю, что это то же самое, что и мой скрипт, просто написанный по-другому

2. Да, цель скрипта такая же, как и у вашего оригинала, но реализация отличается. Обратитесь к api.jquery.com/unbind для получения более подробной информации о том, почему ваш не работает. Привязка / отвязка как функциональной переменной в отличие от анонимной функции вызывает проблемы.

3. Работает для меня, должно быть что-то конкретное для вашей реализации. Извините, не смог помочь. Удачи, прочитайте ссылку из предыдущего комментария.

4. live != привязка, если элементы не существуют на момент выбора, привязка не будет полезна.

Ответ №2:

Так что я не думаю, что то, что вы хотите, точно возможно. Проблема, по-видимому, заключается в использовании .live и отвязке. Вы можете отвязать событие mouseleave с .die помощью . Однако используемый селектор должен соответствовать тому, который изначально использовался для привязки события, в вашем случае .block . Я думаю, что это, очевидно, плохо. Пример скрипки .die

http://jsfiddle.net/EZNDg/

Я думаю, что вместо этого вам нужно привязать, используя явный селектор для текущего элемента, поэтому, возможно, использовать .each с вашим селектором, а затем привязать с помощью $(this). Это должно позволить die работать. Я буду возиться с этой скрипкой и посмотрю, правда ли это.

Ответ №3:

события live , связанные с, не связаны с die