簡體   English   中英

腳本標簽在HTML文檔中的位置- <head> 和 <body> 有不同的行為

[英]Position Of Script Tags In HTML Document - <head> & <body> Has Different Behaviour

我有這段HT​​ML代碼:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Backbone.js Demos</title>
</head>
<body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
  <script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
  <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.6/underscore-min.js"></script>
  <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
  <script src="app.js"></script>

<script type="x-tmpl" id="list_tmpl">
    <span><%= part1 %><%= part2 %></span>
    <a href="#swappy" class='swap'>[SWAP]</a>
    <span>&nbsp;</span>
    <a href="#del" class='remove'>[DELETE]</a>
</body>
</html>

當腳本標簽在body標簽之間時,我的腳本可以正常工作。 但是,如果我將所有腳本標簽都移到head ,它們將停止工作。 我對為什么感到困惑。 這種行為有什么原因嗎? 謝謝大家的時間和幫助!

編輯:APP

(function($){

    Backbone.sync = function (method, model, success, error){
        success();
    };

    var Item = Backbone.Model.extend({
        defaults: {
            part1: 'Hello',
            part2: 'World'
        }
    });

    var ItemList = Backbone.Collection.extend({
        model: Item
    });

    var ItemView = Backbone.View.extend({
        tagName: 'li',

        events: {
            'click .swap': 'swap',
            'click .remove': 'remove'
        },

        initialize: function(){
            _.bindAll(this, 'render', 'unrender', 'swap', 'remove');

            this.model.bind('change', this.render);
            this.model.bind('remove', this.unrender);
        },

        render: function(){
            $(this.el).html(_.template($('#list_tmpl').html(), this.model.toJSON()));
            return this;
        },

        unrender: function(){
            $(this.el).remove();
        },

        swap: function(){
            var swapped = {
                part1: this.model.get('part2'),
                part2: this.model.get('part1')
            };

            this.model.set(swapped);
        },

        remove: function(){
            this.model.destroy();
        }
    });

    var AppView = Backbone.View.extend({
        el: $('body'),

        events: {
            'click #add': 'addItem'
        },

        initialize: function (){
            this.counter = 0;

            _.bindAll(this, 'render', 'addItem', 'appendItem');

            this.collection = new ItemList();
            this.collection.bind('add', this.appendItem);

            this.render();
        },

        render: function(){
            $(this.el).append("<button id='add'>Add Item</button>");
            $(this.el).append("<ul id='todoList'/>");
        },

        addItem: function(){
            this.counter++;
            var item = new Item();
            item.set({
                part2: item.get('part2') + this.counter
            });

            this.collection.add(item);
        },

        appendItem: function(item){
            var itemView = new ItemView({
                model: item
            });

            $('#todoList', this.el).append(itemView.render().el);
        }
    });

    var Tasker = new AppView();
})(jQuery);

解決此問題的最簡單方法是使用以下命令啟動app.js

$(function() {

代替

(function($){

jQuery在DOM可用后執行腳本。 比起您,您可以將腳本放在首位。

當js文件在加載后使用主體時,就會發生此行為,因此必須將它們嵌入主體中。

您可以將jquery,json和下划線文件放在頭部。

其他文件,必須檢查它們在加載時是否不調用主體。

您將不得不使用頁面中元素的屬性在app.js的末尾添加app.js。

使用此標記。 始終關閉腳本標簽。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Backbone.js Demos</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
  <script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
  <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.6/underscore-min.js"></script>
  <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
</head>
<body>
    <script type="x-tmpl" id="list_tmpl">
    <span><%= part1 %><%= part2 %></span>
    <a href="#swappy" class='swap'>[SWAP]</a>
    <span>&nbsp;</span>
    <a href="#del" class='remove'>[DELETE]</a>
    </script>
    <script src="app.js"></script>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM