【发布时间】:2012-10-03 17:10:29
【问题描述】:
一些快速背景
我正在构建一个在某些区域使用 html 网络视图的 iOS 应用程序。我想确保这些页面上的 html 按钮在外观和感觉上都尽可能像 iOS 按钮。为此,我想要一个点击状态,以便在点击时按下 html 按钮。现在在 HTML 中这很容易。您只需为 :active 或 :hover 或其他设置样式。我实际上已经定义了这个。然而,在 iOS 中,这些状态不会在点击时参与 - 至少在正常情况下是这样。所以我的目标是编写一个小脚本,为按钮添加一个类来改变它在touchstart时的外观。
问题
然而,事实证明我不需要那么复杂......纯属偶然,我使用以下代码进行了测试:
document.addEventListener('touchstart', function(event) {
console.log("test");
}, true);
我对 javascript 和 jQuery 非常熟悉,所以我打算做的只是检查我的语法并确保在我点击按钮时触发了 eventListener。令我惊讶的是,css 中按钮的 :active 状态被触发(以及 :hover 状态)。那段代码……解决了我的问题!
我的问题
所以这是我的问题:上面的代码有效吗?我的意思是,这样做不好吗?就好像空的 eventListener 只是触发了桌面浏览器已经提供的行为。使用这种方法有什么问题吗?我是绿色的,但我不想养成坏习惯。如果这是一种糟糕的编码方式,我不想使用它。
感谢你们提供的任何见解!
【问题讨论】:
-
如果你愿意,你可以有空的事件监听器,但我认为 console.log() 会在 IE 中给出一个 js 错误
-
空听众没有错。但是您拥有的每个听众都会增加您可能不应该关心的那一点点开销。检查
console和console.log很重要,因为除非打开调试控制台(如Firebug 或开发者工具),否则它们可能不可用——而不是基于浏览器。 -
我致力于保持代码精简和平均。出于本文的目的,我将 console.log 命令留在代码中以说明我的初衷。之后,我确实删除了它,只是将事件侦听器完全留空。
-
你确定没有听众他们就不能工作吗?在我看来,更改脚本碰巧刷新了缓存。
-
是的,我很肯定。我删除了监听器,他们再次停止显示 :active :hover 状态。我完全不知道为什么添加一个空的侦听器会触发移动 safari 显示 :active :hover 状态的能力,但它似乎这样做了。
标签: javascript jquery ios mobile button