2013-04-11 6 views
0

Я знаю, что с jQuery довольно легко увидеть, щелкнул ли пользователь за пределами определенного элемента, а затем отреагировал на него, подобно тому, как его закроет щелчок за пределами раскрывающегося раскрывающегося меню.JavaScript, нажатый вне элемента

Я пытаюсь достичь чего-то подобного с помощью JavaScript в одиночку, без jQuery. Вот мой текущий код:

window.onload = function() { 
    var nav = document.querySelectorAll('ul li.current_page_item'); 
    var navList = nav[0].parentNode; 

//Open the navigation menu list 
    nav[0].onclick = function() { 
    navList.className = 'open'; 
    } 
} 

В настоящее время, код будет применяться классом open в неупорядоченный список, если его дочерний элемент li.current_page_item щелкнул.

Я хотел бы вызвать событие (удалить класс open), если пользователь нажимает кнопку за пределами элемента списка li.current_page_item.

Может ли кто-нибудь показать, как я мог слушать, а затем отреагировать на событие, которое сделает что-то вроде этого только с JavaScript?

Спасибо за ваше время.

+0

Ну подумайте о том, как вы могли бы сделать это _with_ JQuery, а затем применить тот же принцип в равнинных JS: вы, вероятно, начать с привязки обработчика щелчка к документу, потому что ловил щелчки вне меню item ... – nnnnnn

+0

Да, я знаю. Я немного изменил свой предыдущий комментарий после того, как вы его впервые увидели, но даже в оригинальной версии не говорилось «использовать jQuery», он попросил вас подумать о том, как вы это сделаете с помощью jQuery (в надежде, что это даст вы знаете, как это сделать без - одни и те же принципы применяются в любом случае). – nnnnnn

+0

@ spryno724 он означает, что, как вы знаете jQuery, вы можете применить такую ​​же логику для решения проблемы с помощью обычного JavaScript. Я., вы 'addEventLister' в' document' в чистом javascript – Ejaz

ответ

1

Добавить щелкнуть по документу, который закроет div, и не забудьте остановитьпрограммирование в обработчике li или он будет распространяться и на документ.

document.onclick = function(e) { 
    navList.className = 'close'; 
} 

nav[0].onclick = function(e) { 
    navList.className = 'open'; 
    e.stopPropagation(); // <---- 
} 
+0

Yessss! Полностью не думал о 'stopPropagation()'. Спасибо! –

Смежные вопросы