繁体   English   中英

这个函数有什么问题(testFunction)

[英]what's wrong with this function (the testFunction)

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
        <title>test</title>
        <style type="text/css">
        .button_test{
            border-radius: 4px;
            padding: 4px;
            cursor: pointer;
            background-color:#999; 
        }
        </style>
    </head>
    <body>
        <span class="button_test">debug</span>
        <script type="text/javascript">
        var testFunction = function(_callback){
            $(".button_test").click(function(){
                if ("function"==typeof(_callback)) {
                    _callback();
                };
            })
        }
        testFunction(function(){
            console.log(111);
        });
        </script>
    </body>
</html>

该功能testFunction已被使用一次,所以我想,当我clcik $(".button_test")在第一时间,控制台将输出111那么无论有多少次点击$(".button_test")时,控制台将不会输出任何内容。
但是,实际上,每次单击$(".button_test") ,控制台都会输出111。

Click不会一次运行事件,而是在事件发生时每运行一次。 停止它的唯一方法是取消绑定该事件或在其中添加一个标志以表示未运行。 但是有更好的方法,因为jQuery有一种方法可以运行一次事件,那就是one()

一()

.one( events [, data ], handler(eventObject) )返回: jQuery

说明:将处理程序附加到元素的事件。 每个事件类型的每个元素最多只能执行一次处理程序。

您的代码可以像这样使用它

    var testFunction = function(_callback){
        $(".button_test").one("click", function(){
            if ("function"==typeof(_callback)) {
                _callback();
            };
        })
    }
    testFunction(function(){
        console.log(111);
    });

您正在.button_test上注册一个click事件处理程序。 除非取消绑定事件,否则每次您单击该元素时都会启动该事件。

您描述的行为是预期的行为。

有关点击和/或绑定的信息参阅文档。

这不是testfunction是附加到.button_test的单击处理程序,但执行该匿名函数console.log(111)

没有什么变化上单击处理.button_test您运行一次后testfunction ,使按键继续执行console.log(111)每次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM