Jump to content
  • 0

Как узнать имя объекта по которому кликнули? Событие click() jQuery


Bloomerwd
 Share

Question

Здравствуйте ув. пользователи данного форума.

У меня возник вопрос..

Какими средствами узнать имя объекта на который кликнул пользователь?

Заранее благодарю.

Link to comment
Share on other sites

Recommended Posts

  • 0

Есть меню, которое по кнопке выезжает. Кнопка в два действия - открыть/закрыть меню, но нужно сделать так если юзер кликнул вне меню оно закрылось, сейчас сделал событие на body, то есть клик в любой части окна браузера закрывает меню.

Link to comment
Share on other sites

  • 0

Не работает.

Вот код:

$('body').click(function(){	if($('.left_column').css('left') == "0px"){		$('.left_column').animate({left: "-220px"},300,'easeInSine');	}});$('.left_column').click(function(event){	event.stopPropagation();	if($(this).css('left') == "0px"){		$(this).animate({left: "-220px"},300,'easeInSine');	}	else{		$(this).animate({left: "0px"},300,'easeInSine');	}});
Link to comment
Share on other sites

  • 0

Вот так сделай:

$('.left_column').click(function(event){	if($(this).css('left') == "0px"){		$(this).animate({left: "-220px"},300,'easeInSine');	}	else{		$(this).animate({left: "0px"},300,'easeInSine');	}});$(document).on({    click : function(e) {        if($(e.target).closest('.menu').length === 0) {            $('.left_column').animate({left: "-220px"},300,'easeInSine');        }    }});

.menu обертка твоей менюшки, ну или что там у тебя

Link to comment
Share on other sites

  • 0

Zverushka, на сколько я понял,

if(!$(e.target).is('.action_left_column') - если не один из объектов не является .action_left_column

&& $(e.target).closest('.left_column').length === 0) - и найденный из всех, left_column равен 0

Вроде так  ^_^

Edited by Bloomerwd
Link to comment
Share on other sites

  • 0

$(document).on({

// Вешаем событие на document

// e - объект события

// e.target - указывает на элемент по которому кликнули

click : function(e) {

// Если e.target не кнопка переключатель и не выезжающее меню,

// то закрываем .left_column

if(!$(e.target).is('#action') && $(e.target).closest('.left_column').length === 0) {

$('.left_column').animate({left: "-90px"},300);

}

}

});

Link to comment
Share on other sites

  • 0

hasClass'ом ты не проверишь по id селектору, ну и в целом is() банально удобнее.

 

А разница между hasClass() и is() в подавляющем большинстве случаев экономия на спичках, так что можно пользовать удобный is() и не париться

Link to comment
Share on other sites

  • 0

И получается, что каждый клик по странице будет перебирать все ветку дерева пределах ребенок-родитель $(e.target).closest('.left_column').? Это ведь тоже не очень хорошо? В другом же методе обрабатывается чисто 2 события - клик по странице и остановка всплытия события меню.

П.С. И я не прикапываюсь, я просто так изучаю програмированние, рассуждая) Метод, конечно, очень интересный.

Edited by Zverushka
Link to comment
Share on other sites

  • 0
И получается, что каждый клик по странице будет перебирать все ветку дерева пределах ребенок-родитель $(e.target).closest('.left_column').? Это ведь тоже не очень хорошо?

Да будет проверяться ветка, в данном случае мы можем добавить дополнительную проверку на предмет состояния менюшки. Если она и так закрыта, то можно и не проверять всю ветку. По поводу хорошо это или не очень. Давайте будем реалистами, если окажется столько уровней вложенности, что от этого перебора начнет тормозить браузер, то явно разработчик что-то сделал не так. Набрать, хотя бы, 3000 уровневую вложенность крайне затруднительно - это уже определенно не здорово со стороны разработчика, но для браузера это не так уж и много на самом деле.

 

Да можно избавиться от перебора и сделать так http://jsfiddle.net/alexriz/wK2XT/4/

Но кода стало больше и этот подход потенциально может помешать работе других скриптов, которым, возможно будет необходимо работать с этими элементами или их родителями

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy