我的Javascript和HTML

时间:2016-04-24 01:53:34

标签: javascript

这是我的代码:

我收到一条错误消息,指出createBug()不是一个函数(我的onclick所在的位置)。我试图让提交按钮在单击时执行createBug()函数,将所有数据存储到我的主构造函数中。我在搜索中找不到答案,所以我发布了这个。这是我在这里的第一个问题,我是Javascript的初学者。谢谢你的帮助!

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Battle Bugs</title>

    <style>
        @import url(https://fonts.googleapis.com/css?family=Dhurjati);
        #newBug {
            text-align: center;
        }

        h5 {
            font-family: 'Dhurjati', sans-serif !important;
            font-size: 24px !important;
            margin: 0 !important;
            font-weight: 200 !important;
        }

        #newBug {
            background-image: linear-gradient(to bottom, #eeeeee 0, #f4d2fe 100%) !important;
            border-color: none;
        }

        #newBug.btn-primary {
            background-image: linear-gradient(to bottom, #eeeeee 0, #f4d2fe 100%) !important;
            border-color: white !important;
            background-color: #f4d2fe !important;
            color: #b845d9 !important;
            font-family: 'Dhurjati', sans-serif !important;
            font-size: 24px;
        }

        .jumbotron {
            background-image: linear-gradient(to bottom, #eeeeee 0, #f4d2fe 100%) !important;
        }
    </style>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">

    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous">
    </script>

</head>

<body>
    <div class='container'>
        <div class='jumbotron'>
            <form>
                <div id="petInfo"></div>
                <h5>Choose a name for your bug:</h5>
                <br>
                <input type='text' id='newBugName' placeholder='Name your bug!'>
                <br>
                <br>

                <div>
                    <h5>Choose an element type for your bug:</h5>
                    <br>
                    <label class="radio-inline" id='newBugType'>
                        <input type="radio" name='newBugType'>Fire</label>
                    <label class="radio-inline">
                        <input type="radio" name=newBugType>Water</label>
                    <label class="radio-inline">
                        <input type="radio" name='newBugType'>Lightning</label>
                    <label class="radio-inline">
                        <input type="radio" name='newBugType'>Wind</label>
                    <label class="radio-inline">
                        <input type="radio" name='newBugType'>Earth</label>
                    <br>
                    <br>
                </div>
                <div>
                    <h5>Choose an elemental weakness for your bug:</h5>
                    <br>
                    <label class="radio-inline" id='newBugWeakness'>
                        <input type="radio" name="newBugWeakness">Earth</label>
                    <label class="radio-inline">
                        <input type="radio" name="newBugWeakness">Wind</label>
                    <label class="radio-inline">
                        <input type="radio" name="newBugWeakness">Lightning</label>
                    <label class="radio-inline">
                        <input type="radio" name="newBugWeakness">Water</label>
                    <label class="radio-inline">
                        <input type="radio" name="newBugWeakness">Fire</label>
                    <br>
                    <br>
                </div>
                <div>
                    <h5>What would you like to name your pet's special ability?</h5>
                    <br>
                    <input type='text' id='newBugAbility' placeholder='Spell name'>
                    <br>
                    <br>
                </div>
                <div id='submitButton'>
                    <button type="button" class="btn btn-primary btn-lg" id='newBug' onclick="createBug()">Create Bug!</button>
                </div>
            </form>
        </div>
    </div>

    <div class="container-fluid">
        <div class="row-fluid">
            <div class="span2">
                Browse Battle Bugs!
            </div>
            <div class="span10">
                All Battle Bugs!
            </div>
        </div>
    </div>
    <script>
        function Bug(name, type, ability, weakness) {
            this.name = name;
            this.type = type;
            this.ability = ability;
            this.weakness = weakness;
        }
        // Put shared methods in a prototype to increase efficiency, as each instance does not need its own methods (which can use quite a bit of memory in large programs) \\
        Bug.prototype = {
            constructor: Bug, // Makes sure the prototype points to Bug and not Object \\

            createBug: function (name, type, ability, weakness) {

                this.newBugName = new Bug(name);
                this.newBugType = new Bug(type);
                this.newBugAbility = new Bug(ability);
                this.newBugWeakness = new Bug(weakness);

                this.form = document.getElementById('newBug');

                document.getElementById('newBug').addEventListener('click', function () {
                        form.submit();
                    }),
                    console.log("Clicked!");
            },

            displayInfo: function () {
                console.log(this.name + ' is a ' + this.type + ' type bug.');
                console.log(this.name + ' can cast ' + this.ability + ' as its special ability!!');
                console.log(this.name + ' is weak against ' + this.weakness + ' attacks.\n\n');
            },
        };


        var fireBug = new Bug('Firebug', 'fire', 'scorch', 'water');
        var waterBug = new Bug('Aquabug', 'water', 'tsunami', 'lightning');
        var lightningBug = new Bug('Thunderbug', 'lightning', 'flashbolt', 'wind');
        var windBug = new Bug('Breezebug', 'wind', 'cyclone', 'earth');
        var earthBug = new Bug('Boulderbug', 'earth', 'quake', 'water');

        fireBug.displayInfo();

        waterBug.displayInfo();

        lightningBug.displayInfo();

        windBug.displayInfo();

        earthBug.displayInfo();
    </script>
</body>

</html>

2 个答案:

答案 0 :(得分:0)

不是Bug.prototype.createBug

使用某些实例fireBug.createBug(), waterBug.createBug() ...调用它或更改一般的代码

答案 1 :(得分:0)

在onclick中“this”是元素,这就是为什么你不能使用它。您可以将其包装在另一个函数中:

<...    onclick="newBugWrapper()"  ...>

function newBugWrapper(){
    var bug = new Bug(....)
    bug.createBug(..., ..., ..., )
}