2015-04-18 2 views
0

Я просто изучаю так, вероятно, код не самый лучший. Я попробовал несколько примеров в других ответах, но я застрял здесь.Javascript stopPropagation

Function invisibleDiv(){ 
    var invDiv = document.createElement('div'); 
    var secondDiv = document.createElement('div'); 
    secondDiv.setAttribute('class', 'secondDiv'); 
    document.body.appendChild(invDiv); 
    invDiv.appendChild(secondDiv); 
}; 

И у меня есть этот JQuery код:

$(document).on("click", ".secondDiv", function (e){ 
    e.stopPropagation(); 
}); 

Все, что работает, но я пытаюсь заменить все свои функции JQuery с чистым JavaScript, поэтому я попытался это:

document.addEventListener("DOMContentLoaded", function(event) { 
    var secondDiv = document.querySelector('.secondDiv'). 
    div.addEventListener('click', function(e) { 
    e.stopPropagation; // Not working 
    secondDiv.stopPropagation; // Not working 
    } 
}); 

Я попытался добавить прослушиватель событий в функцию invisibleDiv, и я вижу, что в DevTools событие подключено, но при нажатии secondDiv все еще запускает событие в invisibleDiv.

Я могу заставить его работать, добавляя оба divs в html-код с Display: none/block, но поскольку он работает с jQuery при динамическом добавлении, я хочу знать, что я делаю неправильно.

+0

Чтобы сказать, что вы делаете неправильно, вам нужно объяснить, что вам нужно сделать в первую очередь. Что вы хотите выразить с помощью 'secondDiv.stopPropagation'? – zerkms

+0

Я добавляю прозрачный div к телу с размером и размером 100%, а другой - к прозрачному div. Таким образом, вы можете выбирать опции во втором div и при нажатии за пределами второго div он вызывает событие в прозрачном div, которое удаляет оба divs. Но при нажатии опции во втором div он распространяется на прозрачный div и удаляет оба divs. Он работает с JQuery. –

ответ

4

Update:

на основе ваших комментариев выше, мне кажется, что вы ищете что-то вроде этого:

var outer = document.querySelector('.outer'); 
    var inner = document.querySelector('.inner'); 

    outer.addEventListener('click', function(e) { 
     console.log("Outer clicked"); 
    }); 

inner.addEventListener('click', function(e) { 
    e.stopPropagation(); 
}); 

http://jsfiddle.net/j9a0nsto/

Похоже, вы не вызывая функцию.

Функции в JavaScript выполняются с помощью () скобки, чтобы ваш код становится:

e.stopPropagation(); и secondDiv.stopPropagation();

Вызов secondDiv.stopPropagation() является излишним, так как element объект не имеет такой функции, и должна быть удален.

+0

Ничего, насколько я знаю. В коллекции узлов нет метода stopPropagation. Это можно удалить. –

+0

aye. Я пропустил это в первый раз в своей спешке, чтобы ответить. Спасибо за головы. –

+0

Я попробовал stopPropagation(); с и без скобок, но клик все еще распространяется, и я добавил как пример, так как я попытался выполнить e.stopPropagation; e.stopPropagation(); seconDiv.stopPropagation; secondDiv.stopPropagation(); и даже preventDefault. –

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