2013-07-02 3 views
1

Im пытается скрыть/показать функцию JS, которую я определил в расширении хром.JavaScript - функция Toggle

То, что я до сих пор: классы пролетных Я пытаюсь скрыть это ярлык:

dspan.className = "cExtension"; 

//Create toggle button: 

function createToggleButton(){ 
    var toggleButton = document.createElement("button"); 
    toggleButton.innerHTML = "Toggle Overlay"; 
    toggleButton.id = "Toggle" 
    var header = document.getElementById("header"); 
    header.appendChild(toggleButton); 
    toggleExtension(); 
} 

// find all spans and toggle display: 

function toggleExtension(){ 
    var spans = document.getElementsByTagName('span'); 
    var toggle = function() {  
     for (var i = 0, l = spans.length; i < l; i++) { 
      if (spans[i].getAttribute('class') == 'cExtension') 
       if (spans[i].style.display == 'none') spans[i].style.display = ''; 
       else spans[i].style.display = 'none'; 
     } 
    } 
    document.getElementById('Toggle').onclick = toggle; 
} 

Кнопка показывает на заголовок, однако это unclickable. Если я изменю document.getElementById('Toggle').onclick = toggle; на document.getElementById('Toggle').onclick = alert{"Hello");, то предупреждение запускается при загрузке страницы, а не onclick. Я пытаюсь сделать это в чистом JS. Где я иду не так?

+0

Работает отлично здесь: http://jsfiddle.net/SdHm9/ –

+0

Все еще может заставить onclick работать. Я сомневаюсь, что это так, но есть ли что-то другое, что мне нужно сделать, потому что это от расширения Chrome? – Yogzzz

ответ

1

Прежде всего, document.getElementById("Toggle").onclick = alert("Hello"); установит событие onclick на то, что возвращает функция предупреждения, а не сама функция предупреждения. Таким образом, функция оповещения происходит при загрузке страницы, поэтому она может выяснить, что вернуть. Таким образом, вы можете сделать это: document.getElementById("Toggle").onclick = function(){alert("Hello");}; и это может сработать.

Edit: Царапины все, что было здесь: я пропустил эту toggle набор переменных для функции в toggleExtension.

Я не тестировал все это, поэтому я не могу гарантировать, что все это будет работать в вашем конкретном случае.

+0

Вы когда-нибудь вызывали функцию 'toggleExtension'? Причина, если нет, событие onclick никогда не будет установлено. –

-3

Почему бы не использовать jQuery?

Это сделает все, что вам нужно.

http://api.jquery.com/toggle/

Ура!

+2

http://meta.stackexchange.com/a/48195/210016 –

0

если виден установлен удалить его, в противном случае добавить его

div.classList.toggle("visible"); 

добавить/удалить видимым, в зависимости от теста условной, я менее 10

div.classList.toggle("visible", i < 10); 

Убедитесь, что поддержка браузера: http://caniuse.com/#feat=classlist

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