如何从另一个javascript文件初始化插件

时间:2017-01-02 07:43:58

标签: javascript jquery frontend

我有以下小提琴。点击“滚动”按钮,是否可以调用插件中的scrollTest函数?现在我再次调用整个test(),因此每次单击滚动按钮时都会创建一个新的测试对象。

我的代码[fiddle demo]

    (function ($, win, doc) {
    'use strict';

    $.fn.test = Plugin;
    $.fn.test.Constructor = Test;

    function Plugin() {
        return this.each(function () {
            new Test(this);
        });
    }

    // TREE CLASS DEFINITION
    // =====================
    function Test(el) {
         var publ = this,
            priv = {};
        console.log("start");
        $('.test_button').click(function(){
            console.log("clicked");
            publ.scrollTest
        })

         publ.scrollTest = function () {
            console.log("in scrolltest");
        };
        publ.bindEvents= function () {
            console.log("in bind");
        };
        publ.fileter= function () {
            console.log("in filter");
        };
    }
    }(jQuery, this, this.document));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
    <h2>Hello</h2>
    <button class="test_button">Click me</button>
    <button class="test_button2" onclick="$('h2').test()">scroll</button>
    </body>
    <script>
	$('h2').test();
    </script>

1 个答案:

答案 0 :(得分:1)

您需要在form块中包含它的使用,以确保脚本在开始使用之前已加载。

如果您希望代码 为{em> test_button2 类的元素运行$(document).ready();,您可以使用:

onClick

..并替换..

// include this only ONCE on your page.
$(document).ready(function() {
   $(this).test(true); // sends the flag to initialize the click() event once
   $('.test_button2').click(function(){
       $(this).test(); // action on every .test_button2 click();
   });
});

..带..

<button class="test_button2" onclick="$('h2').test()">scroll</button>

请参阅下面的代码,了解有效的修复方法:

<button class="test_button2">scroll</button>
(function ($, win, doc) {
    'use strict';

    $.fn.test = Plugin;

    var publ, priv;

    function Plugin(initialize) {
        if(initialize === true) {
           console.log("start");
           $('.test_button').click(function(){
              console.log("clicked");
           });
        }
        console.log("in scrolltest");
    }

    }(jQuery, this, this.document));