Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何组合类似的事件处理程序?_Javascript_Jquery - Fatal编程技术网

Javascript 如何组合类似的事件处理程序?

Javascript 如何组合类似的事件处理程序?,javascript,jquery,Javascript,Jquery,我有两组几乎相同的事件处理程序。有没有办法将它们结合起来,使代码更加枯燥 这个.E.name只是指向DOM元素的指针/引用 请注意,我的ID与不适用的可能重复的事件类型不同 /*set 1 */ $(this.E.main).on("click", function () { Page.flip('main'); }); $(this.E.feed).on("click", function () { Page.flip('

我有两组几乎相同的事件处理程序。有没有办法将它们结合起来,使代码更加枯燥

这个.E.name只是指向DOM元素的指针/引用

请注意,我的ID与不适用的可能重复的事件类型不同

    /*set 1
    */
    $(this.E.main).on("click", function () {
        Page.flip('main');
    });
    $(this.E.feed).on("click", function () {
        Page.flip('feed');
    });
    $(this.E.so_button).on("click", function () {
        Backbone.trigger('user_sign_out');
        Pane.flip();
        Page.flip();
        Storage.clear();
    });

    /* set 2
    */
    $(this.E.main_nav).on("click", function () {
        Page.flip('main');
    });
    $(this.E.feed_nav).on("click", function () {
        Page.flip('feed');
    });
    $(this.E.so_button_nav).on("click", function () {
        Backbone.trigger('user_sign_out');
        Pane.flip();
        Page.flip();
        Storage.clear();
    });
您可以使用逗号、分隔符和方括号[]组合多个选择器,并使用$this引用当前单击的对象:

$([this.E.main, this.E.feed, this.E.main_nav, this.E.feed_nav]).on("click", function () {
    Page.flip($(this).attr('name'));
});

$([this.E.so_button, this.E.so_button_nav]).on("click", function () {
    Backbone.trigger('user_sign_out');
    Pane.flip();
    Page.flip();
    Storage.clear();
});
希望这有帮助。

您可以使用逗号、分隔符和方括号[]组合多个选择器,并使用$this引用当前单击的对象:

$([this.E.main, this.E.feed, this.E.main_nav, this.E.feed_nav]).on("click", function () {
    Page.flip($(this).attr('name'));
});

$([this.E.so_button, this.E.so_button_nav]).on("click", function () {
    Backbone.trigger('user_sign_out');
    Pane.flip();
    Page.flip();
    Storage.clear();
});

希望这会有所帮助。

您可能会变得更加棘手,只需在对象上迭代即可

var valid = ['main', 'feed', 'so_button']; // in case there are other props in object
$.each(this.E, function(key, value) {

    if ( valid.indexOf(key) !== -1 || valid.indexOf(key + '_nav') !== -1 ) {

        $(this.E[key]).on('click', function() {
            if ( key.indexOf('so_button') !== -1 ) {
                Backbone.trigger('user_sign_out');
                Pane.flip();
                Page.flip();
                Storage.clear();
            } else {
                Page.flip(key)
            }
        });

    }
});

您可能会更加棘手,只需在对象上迭代即可

var valid = ['main', 'feed', 'so_button']; // in case there are other props in object
$.each(this.E, function(key, value) {

    if ( valid.indexOf(key) !== -1 || valid.indexOf(key + '_nav') !== -1 ) {

        $(this.E[key]).on('click', function() {
            if ( key.indexOf('so_button') !== -1 ) {
                Backbone.trigger('user_sign_out');
                Pane.flip();
                Page.flip();
                Storage.clear();
            } else {
                Page.flip(key)
            }
        });

    }
});
试试这个

var mainId = "#" + this.E.main.id;
var mainNavId = "#" + this.E.main_nav.id;

$(mainId + "," + mainNavId ).on("click", function () {
    Page.flip('main');
});
试试这个

var mainId = "#" + this.E.main.id;
var mainNavId = "#" + this.E.main_nav.id;

$(mainId + "," + mainNavId ).on("click", function () {
    Page.flip('main');
});

您可以创建一个实用javascript函数/对象,该函数/对象在事件中为您的每个例程都有一个方法。一个班轮仍然是一个班轮,4个班轮将成为一个班轮。您并没有大幅减少代码量,但维护会更好,未来的可维护性也会更好,尤其是在一行程序中添加更多逻辑时。

您可以创建一个实用javascript函数/对象,该函数/对象在事件中为您的每一个例程提供一个方法。一个班轮仍然是一个班轮,4个班轮将成为一个班轮。您并没有大幅减少代码量,但维护会更好,未来的可维护性也会更好,尤其是在一行程序中添加更多逻辑时。

可能的重复不是,我有不同的ID不是不同的事件类型。可能的重复不是,我有不同的ID,没有不同的事件类型。