1

不确定是什么原因造成的,或者它是否与 Grails 有关。

我有一个方法,我想先调用身体负荷。然后是脚本标记中的第二个方法。我一直认为 body onload 方法调用会首先进行 - 我想我错了。

警报的顺序是 3,然后是 1,然后是 2。

有任何想法吗?

<html>
<head>
    <title>${cname} Organization Chart</title>

    <link rel="stylesheet" href="${resource(dir: 'css', file: 'custom.css')}" type="text/css"/> 
    <link rel="stylesheet" href="${resource(dir: 'css', file: 'jquery.jOrgChart.css')}" type="text/css"/>   
    <link rel="stylesheet" href="${resource(dir: 'css', file: 'bootstrap.min.css')}" type="text/css"/>  
    <link rel="stylesheet" href="${resource(dir: 'css', file: 'prettify.css')}" type="text/css"/>   

    <g:javascript src="prettify.js" />
    <g:javascript src="jquery.jOrgChart.js" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>

    <script>
        alert('3');
        jQuery(document).ready(function() {
            $("#org").jOrgChart({
                chartElement : '#chart',
                dragAndDrop  : true
            });
        });
    </script>

<body onload="alert('1');prettyPrint();alert('2');">

    <ul id='org' style='display:none'></ul>

    <div id="chart"></div>
</body>
</html>
4

3 回答 3

3

<body onload=...>实际上(并且奇怪地)设置window.onload事件,在所有最初请求的外部资源(图像、脚本等)完成加载后调用。

$(document).ready()根据您的需要,您可能应该使用 jQuery 的处理程序或内联脚本。

于 2012-10-08T19:45:05.740 回答
2

最好的选择是将所有 javascript 放在一个 javascript 文件中,而不是从 HTML 中执行任何内容。

HTML:

<html>
    <head>
        <title>${cname} Organization Chart</title>
        ... snip ...
        <script type="text/javascript" src="someJSFile.js" />
    </head>
    <body>
        <ul id='org' style='display:none'></ul>
        <div id="chart"></div>
    </body>
</html>

一些JSFile.js:

$(document).ready(function() {
    prettyPrint();

    $("#org").jOrgChart({
        chartElement: '#chart',
        dragAndDrop: true
    });
});
于 2012-10-08T19:49:50.510 回答
1

onload事件在页面加载后立即触发。当网页完全加载所有内容时触发。

一旦解析器遇到它,脚本标记内的那个就会被触发。

所以警报触发的顺序是完全正常的。

于 2012-10-08T19:44:51.630 回答