2012-10-28 61 views
1

我目前使用這樣的:是否可以在Javascript中動態設置要綁定的事件?

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"); 
     } 
    }); 
} 

,因爲我得到了很多的resize事件觸發的在觸摸設備上,當我不需要他們。

我也嘗試過的語法如下:

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

但是這會產生在Firefox錯誤(app.start()在線1`沒有定義 - 這是我的應用程序,所以這並沒有告訴我很多)。切換回第一個語法,一切正常。

問題
是否可以動態設置要綁定的事件?如果是這樣,這種情況下正確的synatx是什麼?

謝謝!

+0

「動態設置事件」是什麼意思? –

+0

就像這樣:'case A:bind to orientationchange resize |情況B:綁定到orientationchange',所以我正在尋找在bind-statement中執行此操作的語法=要麼在其中存在if-else,要麼在適用的事件中傳遞一個變量。我嘗試過(見上面),但我得到奇怪的錯誤,所以我想知道這是否可能 – frequent

+0

這是可能的,你的語法對我來說看起來是正確的。字符串連接周圍的外圍是不必要的,但不應該有所作爲。 –

回答

1

可以最大限度地減少代碼的重複做這樣的事情這個:

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

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

什麼與此

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

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

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

是找我

+1

這真是太神奇了,你已經發布幾乎字符的字符相同的代碼我的:),你是40秒快:)(順便說一句:你在最後缺少括號) – rsp

+1

好吧..你贏了;-) – bukart

+0

好的。像他們一樣。謝謝,儘管與最後一個答案。目前。讓我們看看這是否修復它。 – frequent

1

這不是測試,但你可能喜歡的東西做清潔:

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

哈哈,好聽的^^ – bukart

相關問題