是否可以在Javascript中动态设置我想要绑定的事件?

时间:2012-10-28 14:24:06

标签: javascript jquery events dynamic event-handling

我目前正在使用它:

if ( $.support.touch == true ) {
    $(window).on('orientationchange', function(event){
        if ( full == false ) {
            self.hideAllPanels("7");
        }
    });
} else {
    $(window).on('orientationchange resize', function(event){
        if ( full == false ) {
            self.hideAllPanels("7");
        }
    });
}

因为我在触摸设备上触发了大量的调整大小事件,而我不需要它们。

我还尝试了以下语法:

$(window).on( ( 'orientationchange'+ ( $.support.touch ? '': ' resize') ), function(event){
    ...
});

但这会在Firefox中产生错误({1}}未在第1行上定义 - 这是我的应用程序,所以这并没有告诉我太多)。切换回第一种语法,一切正常。

问题
是否可以动态设置我想要绑定的事件?如果是这样,在这种情况下,正确的synatx是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

这是什么

function handler( event ) {
    if ( full == false ) {
        self.hideAllPanels("7");
    }
}

$(window).on('orientationchange', handler );

if ( !$.support.touch ) {
    $(window).on( 'resize', handler);
}

对我来说看起来更干净

答案 1 :(得分:1)

这未经过测试,但您可以使用以下内容进行测试:

function handler(event) {
    if ( full == false ) {
        self.hideAllPanels("7");
    }
}
$(window).on('orientationchange', handler);
if ( ! $.support.touch ) {
    $(window).on('resize', handler);
}

答案 2 :(得分:1)

可以最大限度地减少代码重复:

 var events = $.support.touch ? 'orientationchange' : 'orientationchange resize';

$(window).on(events, function(event) {
    if (full == false) {
        self.hideAllPanels("7");
    }
});