#jquery #mouseevent
#jquery #mouseevent
Вопрос:
Привет, у меня есть этот HTML-код
<th scope="col" class="" style="width: 13px;">
<div class="some-handle"></div>
<a href="javascript:__doPostBack('ucPWP$ctl03$3056$GVReport','Sort$3')">Passengers</a>
</th>
и имеет этот JS-код
$("Table tr th").mousedown(function (e) {
/*mousedown code goes here... */
/* ignore if mousedown occur on div "some-handle" */
}
Теперь я пытаюсь отследить, происходит ли mousedown в div, имеющем класс «some-handle».
могу ли я это сделать?
Ответ №1:
Проверьте e.target
. Это элемент, из которого возникло событие.
if ($(e.target).hasClass('some-handle')) {
// fired on div "some-handle"
}
Комментарии:
1. Извините — это НЕ ответ на ваш вопрос. Вы спросили, как предотвратить то, что происходит при нажатии на элемент с этим классом.
2. блестящий ответ, не знал, что событие будет отображаться даже на дочерних элементах!
3. @anasnakawa хотя ваш комментарий о коде верен, ответ, принятый OP здесь, вообще неверен. openidsujoy сообщает «игнорировать», когда объект получает событие mousedown. Так что, ИМХО, это не решает проблему. Вы даже не могли бы поставить
else
, потому что это сработало бы для всего, и это тоже неверно.4. @T9b Вопрос в том, как найти точный элемент, при котором было запущено событие. Это
e.target
. Я не совсем уверен, чего хочет OP (вопрос вряд ли ясен), но решение почти наверняка будет включатьe.target
. Мой код работает с предоставленным HTML.5. @lonesomeday Я согласен, что спрашивающий не прояснил и также спросил, как идентифицировать наведение курсора мыши на элемент с классом. Но я хочу сказать, что
/* ignore if mousedown occur on div "some-handle" */
это не то же самое, что// fired on div "some-handle"
, и мой аргумент заключается в том, что даже если он может идентифицировать событие из вашего кода — это было бы бесполезно, потому что ему на самом деле нужно обработать что-то еще. Я хотел бы, чтобы OP ответил на это обсуждение и ответил, как он смог использовать ваш код, чтобы «игнорировать» событие, которое было запущено, или же он должен выбрать другой ответ.
Ответ №2:
Вы можете сделать что-то вроде этого
$("Table tr th").mousedown(function (e) {
if ($(this).hasClass('some-handle')) {
// ignore
return False;
}
/*mousedown code goes here... */
}
Ответ №3:
что вам нужно сделать, так это сохранить значение в, th
когда мышь находится над вашим some-handle
div, а затем проверить это значение, когда мышь находится над th
элементом:
$("Table tr th").mousedown(function (e) {
/*mousedown code goes here... */
/* ignore if mousedown occur on div "some-handle" */
if(!$(this).data('overSomeHandle')) {
// do your code here
}
}
$('.some-handle').hover(
function(){
// we are over some-handle div
$(this).parent().data('overSomeHandle', true);
},
function(){
// we are out of some-handle div
$(this).parent().data('overSomeHandle', false);
}
);
Ответ №4:
Я думаю, у вас возникли проблемы, потому что у вас есть ссылка, вложенная в ваш <DIV>
. Я подозреваю, что щелчок по ссылке приведет к переопределению вашего кода.
Поэтому вам необходимо обработать щелчок, прежде чем внедрять код:
$("Table tr th").mousedown(function (e)
{
e.preventDefault(); //this nullifies the click
if ($(this).hasClass('some-handle'))
{
// ignore
return False;
}else{
/*mousedown code goes here... */
}
});