2013-08-29 5 views
0

Я пытался выяснить способ динамической записи на стол в теле с головы и натолкнулся на этот пример кода. Проблема в том, что он вызывает функцию, используя 'onload'. Мне нужно вызвать функцию из цикла в моем коде для записи в таблицу.Как вызвать функцию без загрузки

<!DOCTYPE HTML> 
<html> 
<head> 
<title>Untitled Document</title> 

<style type="text/css"> 
.mytable { 
border:1px solid #000000; 
border-collapse:collapse; 
width:200px; 
} 
.mytable td{ 
background:#cccccc; 
border:1px solid #000000; 
} 
</style> 

<script type="text/javascript"> 
onload=function(){ 
var nrCols=2; 
var maxRows=4; 
var nrRows=maxRows+1; 
while(nrRows>maxRows){ 
nrRows=Number(prompt('How many rows? Maximum '+maxRows+' allowed.','')); 
} 
var root=document.getElementById('mydiv'); 
var tab=document.createElement('table'); 
tab.className="mytable"; 
var tbo=document.createElement('tbody'); 
var row, cell; 
for(var i=0;i<nrRows;i++){ 
    row=document.createElement('tr'); 
    for(var j=0;j<nrCols;j++){ 
     cell=document.createElement('td'); 
     cell.appendChild(document.createTextNode(i+' '+j)) 
     row.appendChild(cell); 
    } 
    tbo.appendChild(row); 
} 
tab.appendChild(tbo); 
root.appendChild(tab); 
} 
</script> 
</head> 
<body> 
<div id="mydiv"></div> 
</body> 
</html> 

Я попытался назвать функцию и избавиться от OnLoad и вызвать функцию из сценария в голове, но это не работает.

ответ

2

вы должны поставить scriptпосле в DIV в HTML, чтобы использовать function foobar() и потом написать foobar();

это для вызова функции, однако onload=function() также работает в <head> теге. причина в том, что его функция отображается в порядке, а <div> не будет существовать в точке, где страница достигает ее, если ее в голове, однако onload означает после страница закончила загрузку.

+0

Нет кода, который я вставил, отлично работает, но мне нужно изменить его в соответствии с моими требованиями. Причина, по которой я использовал этот образец, заключается в том, что сценарий находится в голове, что является частью моего требования. – dlofrodloh

+0

Если я поместил скрипт после div в html, как я могу вызвать функцию из головы? – dlofrodloh

+0

@ user2721465 жаль, что неясно, пожалуйста, проверьте изменения. –

0

Не уверен, что я полностью понимаю вопрос, но определяю вашу функцию заголовком, а затем вызываю вашу функцию в конце вашего html-файла.

+0

Мне нужно вызвать функцию из заголовка. – dlofrodloh

+0

Зачем вам это нужно? –

1

Это не так уж сложно. Но сначала вы должны разделить js и пометить.

Сегрегация позволяет лучше управлять кодом. Попробуйте это:

HTML:

<div id="mydiv"></div> 
<button id="btn">Click</button> 

JS:

writeToTable(); 
function writeToTable(){ 
var nrCols=2; 
var maxRows=4; 
var nrRows=maxRows+1; 
while(nrRows>maxRows){ 
nrRows=Number(prompt('How many rows? Maximum '+maxRows+' allowed.','')); 
} 
var root=document.getElementById('mydiv'); 
var tab=document.createElement('table'); 
tab.className="mytable"; 
var tbo=document.createElement('tbody'); 
var row, cell; 
for(var i=0;i<nrRows;i++){ 
    row=document.createElement('tr'); 
    for(var j=0;j<nrCols;j++){ 
     cell=document.createElement('td'); 
     cell.appendChild(document.createTextNode(i+' '+j)) 
     row.appendChild(cell); 
    } 
    tbo.appendChild(row); 
} 
tab.appendChild(tbo); 
root.appendChild(tab); 
} 

Найдите рабочее решение здесь: http://jsfiddle.net/tx5Xd/

+0

Я уже закодировал свое приложение java, кроме вывода в таблицу. Что я должен был бы сделать, чтобы отделить мой код? – dlofrodloh

+0

Ок, снятые теги головы и тела, теперь это работает. – dlofrodloh

0

Мой предпочтительный способ обработки ситуаций, как это в а) все еще используют onload, потому что это gre чтобы браузер сообщил вам, что содержимое закончило загрузку; но б) идти вперед и факторировать ваш код в свою собственную функцию, но затем просто позвоните , что функция от вашего onload обработчика. Например:

function myFunction(param1, param2) { 
    // do your important stuff here 
} 

window.addEventListener('load', function(){ 
    myFunction('foo', 'bar'); 
}, false); 

Таким образом, ваша функция до сих пор не дозвонились до после завершения загрузки страницы, но вы также можете вызвать его отдельно позже, если вам нравится.

+0

Выглядит многообещающе, но мне сложно передать строку в качестве аргумента функции, которая потребуется в моем приложении. – dlofrodloh

+0

И я все еще не могу вызвать функцию в определенном месте/времени в коде. – dlofrodloh

+0

Вы можете обернуть анонимную функцию вокруг вашей функции 'onload', которая позволит вам передавать параметры при вызове (обновленный код выше, чтобы показать). И вы абсолютно можете вызвать функцию 'myFunction' всякий раз, когда захотите, вам ничего не остановить. –