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