2015-05-08 2 views
1

Я работаю с меню аккордеона в JavaScript, вот кодаккордеон не работает в функции

<body> 
<script> 
    $(function() { 
    $("#accordion").accordion(); 
    }); 
    </script> 
<div style="width:50%;float: left;height:50%;" id="accordion"></div> 

<script> 

var html = ''; 
var text = 'Lorem ipsum dolor sit amet ..'; 
// first we generating our html in the loop 
for(var i=0 ; i<6 ; i++) { 
    html += '<h3>Section ' + i + '</h3>' + '<div><p>' + text + '</p></div>'; 
} 
document.getElementById("accordion").innerHTML = html; 

// next we're inserting html into block with ID accordion 

</script> 

это работает отлично, но когда я положил его в функцию, она doen't работу Этот код не работает

<body onload="test()"> 
<script> 
    $(function() { 
    $("#accordion").accordion(); 
    }); 
    </script> 
<div style="width:50%;float: left;height:50%;" id="accordion"></div> 

<script> 
function test(){ 
var html = ''; 
var text = 'Lorem ipsum dolor sit amet ..'; 
// first we generating our html in the loop 
for(var i=0 ; i<6 ; i++) { 
    html += '<h3>Section ' + i + '</h3>' + '<div><p>' + text + '</p></div>'; 
} 
document.getElementById("accordion").innerHTML = html; 
} 
</script> 

Как я могу сделать меню аккордеона в пределах функций?

+0

Разве не вызывается из этой строки: OnLoad = "тест()"? –

ответ

2

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

EDIT: не могу поверить, я пропустил линию onload="test()". , который заставляет меня думать, что причиной может быть исполнение. вы вызываете тест перед его определением, что может быть причиной. определите тестовую функцию где-нибудь в верхней части (до onload=test()), которая может сделать трюк. Также вызов теста из $ (function() ...) может быть хорошей идеей, потому что это будет окончательно выполняться после documentReady и до вызова функции .accordion() P.S. принимайте это как предложение, а не конкретный ответ, так как я не могу проверить свой ответ сам на своем рабочем месте.

+0

Не вызывается ли это из этой строки: onload = "test()"? –

+0

Что вы подразумеваете под удобным местом? –

1

Вы также должны поместить функцию между тегами сценария. Вы не закрыли свой тег скрипта.

+0

Тэг сценария закрыт, но я забыл вставить его. Сообщение отредактировано –

0

Проблема решена, вот правильный код:

<head> 
    <script> 
function test(){ 
var html = ''; 
var text = 'Lorem ipsum dolor sit amet ..'; 
for(var j=0 ; j<6 ; j++){ 
for(var i=0 ; i<1 ; i++) { 
    html += '<h3>Section ' + j + '</h3>' + '<div><p>' + text + '</p></div>'; 
} 
document.getElementById("accordion").innerHTML = html; 
} 

    $("#accordion").accordion(); 
} 
</script> 
</head> 
<body onload="test()"> 
<div style="width:50%;float: left;height:50%;" id="accordion"></div> 
</body> 
Смежные вопросы