2012-10-03 74 views
4

一些快速的背景空事件監聽器:這好嗎?

我建立一個使用在一些地區HTML網頁視圖的iOS應用。我想確保這些頁面上的html按鈕看起來和感覺儘可能像iOS按鈕一樣。爲了達到這個目的,我想要一個點擊狀態,以便點擊時按下HTML按鈕。現在在HTML中這很容易。你只需設置一個樣式:active或:hover或其他。我其實已經定義了這一點。但是,在iOS中,這些州不會進行竊聽 - 至少通常是這樣。所以我的目標是寫一個腳本,在按鈕上添加一個類來改變它在ontouchstart上的外觀。

的問題

然而,事實證明,我沒有必要讓那麼複雜......純屬偶然,我跑用下面的代碼測試:

document.addEventListener('touchstart', function(event) { 
    console.log("test"); 
}, true); 

我m漂亮的綠色與javascript & jQuery,所以我打算做的是檢查我的語法,並確保eventListener點擊按鈕時觸發。令我驚訝的是,按鈕的:在CSS激活狀態(以及:懸停狀態)。該代碼...解決了我的問題!

我的問題

因此,這裏是我的問題:上面的代碼合法嗎?我的意思是,這樣做不好嗎?就好像空的eventListener觸發了桌面瀏覽器已經提供的行爲。使用這種方法有什麼問題嗎?我是綠色的,但我不想挑起壞習慣。如果這是一種不好的代碼方式,我不想使用它。

感謝您的任何見解,你們可以給我這個!

+1

你可以空事件偵聽器,如果你想,但我認爲的console.log()將給IE中出現js錯誤 – Huangism

+1

空聽者沒有任何問題。但是每個聽衆都增加了一點你可能不應該關心的開銷。檢查'console'和'console.log'很重要,因爲除非調試控制檯打開(如Firebug或開發工具) - 它不基於瀏覽器,否則它們可能不可用。 – Ian

+0

我關於保持代碼精益和意味。爲了本文的目的,我在代碼中留下了console.log命令來說明我的原意。之後,我刪除了它,只是將事件偵聽器完全清空。 –

回答

1

我個人認爲空的事件監聽器沒有什麼問題(除了函數調用的開銷---這聽起來可以忽略不計)。我建議你利用jQuery的noop功能但如果你必須添加事件偵聽器,但有它什麼都不做:

$(document).on('touchstart', $.noop); 

// or 

document.addEventListener('touchstart', $.noop); 
+0

你介意解釋一下這樣做的好處嗎?我不熟悉noop。 ...並感謝您的反饋! –

+0

我使用noop並提出了這個問題「當你希望傳遞一個什麼都不會執行的函數時,你可以使用這個空函數 這對於提供可選回調的插件作者非常有用;在沒有回調的情況下,像jQuery.noop可以執行。「 但是,我想知道這樣做的好處是什麼?它純粹是區分做一些事情還是做不到的代碼位 –

+1

它基本上是一個已經制作好的空函數,而不是」實例化「你自己的,使用已準備好使用的文本!:D您所引用的文本描述瞭如何以更復雜的方式使用它,例如,如果您*必須完全沒有問題,請求*調用函數,但您不確定是否或者你不需要一個實際的函數來調用,你可以回到調用'$ .noop()'。 –