当我在placeholder
和inputs
中回答有关textareas
文字最佳做法的其他问题时,就出现了这个问题。
使用HTML5 placeholder
肯定是最佳选择,但此时似乎还需要为旧浏览器添加降级解决方案(使用javascript)。
JsFiddle:http://jsfiddle.net/leifparker/DvqYU/16/
问题是:既然他们都完成了几乎完全相同的事情,为什么还要包括两者呢?为什么不利用仅限javascript的解决方案,放弃HTML5实现,直到(接近)普遍接受为止?
当然,通过这个具体示例,添加HTML5 placeholder
属性和hasPlaceholderSupport()
函数是行(4)的相当少的添加,但由于需要降级支持,是否有任何理由打扰渐进式冗余?
我确信双方都有理由,我很想听到它。
提前致谢!
答案 0 :(得分:3)
有理由打扰。随着时间的推移,预计所有浏览器都将支持占位符属性。现在,just a few browsers do not support it(最重要的是,IE 9和劣等,以及Android浏览器)。因此,最终,您的占位符后备代码将是不必要的。如果您使用所有浏览器的脚本发布网站,几年后就完全没必要了。
相反,通过使用特征检测仅在必要时回退到JavaScript解决方案:
这就是Modernizr和yepnope.js(包含在Modernizr中)这样的库已经可以实现的。我建议使用Modernizr并将占位符polyfill解压缩到placeholder-polyfill.js
文件,因此您的代码可能如下所示:
Modernizr.load({
test: Modernizr.placeholder,
nope: 'placeholder-polyfill.js'
});
如果你只是想要yepnope.js并运行你自己的特征检测功能:
yepnope({
test: hasPlaceholderSupport(),
nope: 'placeholder-polyfill.js'
});
这样,您可以节省资源负载并提高大多数浏览器的性能。将来,所有浏览器都会通过测试,从而提高性能。然后,你可以简单地删除yepnope.js / Modernizr调用。
对我而言,它更像是一种关于面向未来的代码的思维方式,同时已经充分利用了现代浏览器的功能。
答案 1 :(得分:0)
我看到的增益是你只能在必要时加载jsFiddle。这节省了加载,解析和执行额外代码所需的时间。您的页面加载速度更快,本机html5支持可能比在JavaScript中模拟它更快。