【问题标题】:Is it possible to dynamically set the events I want to bind to in Javascript?是否可以在 Javascript 中动态设置我想绑定的事件?
【发布时间】:2012-10-18 01:24:40
【问题描述】:

我目前正在使用这个:

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 中产生错误(app.start() 未在第 1 行定义 - 这是我的应用程序,所以这并不能告诉我太多)。切换回第一个语法,一切又正常了。

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

谢谢!

【问题讨论】:

  • “动态设置事件”是什么意思?
  • 类似:case A: bind to orientationchange resize | case B: bind to orientationchange,所以我正在寻找在绑定语句中执行此操作的语法 = 要么在那里有 if-else,要么传递一个带有适用事件的变量。我试过(见上文),但我遇到了奇怪的错误,所以我想知道这是否可能
  • 您似乎有一组额外的括号可能会导致问题:$(window).on( 'orientationchange'+ ( $.support.touch ? '': ' resize')
  • 您的代码看起来不错。试着让它更干净一点:var event = 'orientationchange' + ($.support.touch ? '' : ' resize'); $(window).on(event, function() { ... });。也许这有助于发现问题。
  • @MattWhipple 括号不会导致问题。例如("test" + (true ? "" : " rest")) 是一个有效的代码。

标签: javascript jquery events dynamic event-handling


【解决方案1】:

可以通过以下方式最大限度地减少代码重复:

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

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

【讨论】:

    【解决方案2】:

    这是怎么回事

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

    对我来说看起来更干净

    【讨论】:

    • 这真是太棒了,你发布了几乎与我相同的字符的代码:) 并且你的速度快了 40 秒 :) (顺便说一句:你最后缺少一个括号)
    • 好的。像他们一样。谢谢,不过最后一个答案。目前。让我们看看这是否能解决问题。
    【解决方案3】:

    这没有经过测试,但您可以通过以下方式进行测试:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2017-02-06
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2014-12-18
      相关资源
      最近更新 更多