Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Как правильно создать функцию?


Автор: EasyTask 24.9.2010, 15:18
Всем привет. Пожалуйста, помогите разобраться с кодом. Ситуация следующая:

Я нашел в интернете интересующий меня скрипт. Он выглядит следующим образом:

Код

<div class="spoil">
<div class="smallfont">Текст описания спойлера<input type="button" value="Развернуть" class="input-button" onclick="
if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') 

this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = 'Свернуть'; 

else 
{
this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Развернуть'; 
}
"/>
</div>
<div class="alt2">
<div style="display: none;">

текст внутри спойлера...

</div>
</div>
</div>



Все работает отлично. Но, возникла следующая проблема. Не очень хочется захламлять код такой громоздкой конструкцией, поэтому я решил обработку события "онклик" вынести в отдельный файл в виде функции. Однако у меня это не получилось :( Когда я делал по типу:

Функция Спойл
// Копипаст содержания обработчика

и вызывал ее при клике ничего не происходило. Я думаю это то из за строк: getElementsByTagName т.к функция не знает какой элемент ее вызывает. Попробовал так:

Код

function Spoil(aid){

if (this.parentNode.parentNode.getElementsById('aid')[1].getElementsById('aid')[0].style.display != '') 

this.parentNode.parentNode.getElementsById('aid')[1].getElementsById('aid')[0].style.display = ''; this.innerText = ''; this.value = 'Свернуть'; 

else 
{
this.parentNode.parentNode.getElementsById('aid')[1].getElementsById('aid')[0].style.display = 'none'; this.innerText = ''; this.value = 'Развернуть'; 
}

}


Тоже не получилось :( помогите разобраться, что не так. Вроде задача банальнейшая взять одну часть кода из файла и вставить в другую. Уже даже подумывал о реализации инклуда через пхп smile Заранее всем большое спасибо!

Автор: patap 24.9.2010, 15:26
Код

<script>
  function foo(node) {
    if (node.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { 
      node.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; node.innerText = ''; node.value = 'Свернуть'; 
    } else {
      node.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; node.innerText = ''; node.value = 'Развернуть'; 
    }
  }
</script>

<div class="spoil">
<div class="smallfont">Текст описания спойлера<input type="button" value="Развернуть" class="input-button" onclick="foo(this)"/>
</div>
<div class="alt2">
<div style="display: none;">

текст внутри спойлера...

</div>
</div>
</div>

Автор: EasyTask 24.9.2010, 15:41
Работает!!! Огромное спасибо!!!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)