The challenge is this. I have an item (say a div or textarea) and I want a certain function to work when I click anywhere, just not on this object. Help, please implement. Thank you in advance.

    2 answers 2

    window.onload = function(){ var stopElems = []; // в этот массив надо сложить нежелательные элементы // напишу код, например, для window window.onclick = function(e) { var e = e | window.event; var stopElemsTotal = stopElems.length; for(var i=0; i<stopElemsTotal; ++i) { if(e.srcElement == stopElems[i]) { return; // если это один из нежелательных элементов // просто прекращаем выполнение обработчика } } // тут твой код обработчика } 

    Although in this case it’s probably better to do something like this:

     function stopElemClicked(clickedElem, stopElems) { var stopElemsTotal = stopElems.length; for(var i=0; i<stopElemsTotal; ++i) { if(clickedElem == stopElems[i]) { return true; // если это один из нежелательных элементов // возвращаем истину } } return false; // если нет - ложь } onload = function(){ window.onclick = function(e) { var e = e | window.event; if(!stopElemClicked(e.srcElement, stopElems)) { // тут код обработчика } } } 
    • And how to do without an array, if I have only one element - Vitaly Zaslavsky
    • mde ... well, then rewrite if (e.srcElement! = stopElement) {// handler code here} Then the function is not needed ... PS: learn the materiel - Zowie

    Set an onclick() event for all objects. If there are a lot of all elements there, then I would do this:

    Put all the objects for your click into some kind of wrapper. Take the wrapper element DIV , give it id="clickWrapper" . Now that all objects in our wrapper, it is easy for all children of our "clickWrapper" set the onclick() event:

     var clickWrapper = document.getElementById('clickWrapper'); //Теперь задаем всем внутренним элементам событие "onclick" ... for (var childItem in clickWrapper.childNodes) { var item = clickWrapper.childNodes[childItem]; /*Теперь проверяем на то, тот ли это элемент, при клике на который не надо вызывать никаких событий... */ if (item.nodeType == 1 //Убеждаемся, что это элемент && item.id!='nonClickableElement'// элемент, на который событие не устанавливаем ) continue;//переходим к следующей итерации //А вот тут уже вешаем событие на остальные элементы if(item.nodeType == 1){ item.onclick = function(e){ //Вот тут ваша функция, которая должна исполняться при клике на элементы } } } 

    For your development more complete in this situation, I give a link where you can read more about the nodeType element.