javascript - JavaScript/HTML 解耦有什么值(value)吗?如果是这样怎么办?

标签 javascript html

最近我一直在为我创建的网站编写越来越多的 JavaScript。我忍不住认为我做错了什么,或者必须有更好的方法。

我在服务器端完全分离了关注点,但在客户端,我发现自己拥有依赖于特定元素 ID 和类名称等的整个 JavaScript 部分。例如,在一个页面上,有很多表单字段,我可能有一段代码看起来像:

$(document).ready(function() {
     $("#ButtonID1").button();
     $("#Grid").someGridFunction();
     $(".data-fields").datepicker();
     $(".submit-links").click(function() { this.closest("form").submit(); });
});

我几乎更喜欢 HTML 元素请求获得某些功能的某种方式。像这样的东西:

<input type="text" data-make="datepicker" />

但即使那样也有缺陷,因为定制它需要 HTML 元素上越来越多的属性来详细说明细节。我对 KnockoutJS 进行了类似的设置,但我对所需的 HTML 真的不满意。

也许是这样的:

<input type="text" data-init="buildDefaultDatePicker" />

其中“buildDefaultDatePicker”是处理必要工作的 JavaScript 函数。

最后,我有两个问题。就特定元素 ID 和类名称而言,将 JavaScript 与 UI 分开是否有任何值(value)。如果是这样,您使用了哪些模式和/或方法来实现这一目标?

(注意,我在上面使用的是 jQuery 语法,但我认为这个问题与框架无关,所以对答案来说无关紧要)

最佳答案

在我看来您已经有了正确的想法(使用类将 JavaScript 增强应用到特定元素)。使用自定义属性,如 data-makedata-init 只是做同样事情的另一种(更繁琐)方式。按照已有的方式,可以使用特定的类作为获取特定功能的请求。

我建议的方法是在 HTML 和 JavaScript 之间保持清晰的分离。 JavaScript 应始终位于外部文件中,并写入 $(document).ready 上的目标页面元素以提供请求的功能。

关于javascript - JavaScript/HTML 解耦有什么值(value)吗?如果是这样怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539461/

相关文章:

javascript - 如何首先加载动态插入的 img

javascript - 本地文件路径的查询字符串和 outlook 电子邮件

javascript - 如何更改 float div 的宽度以填充它们占据的所有空间?

html - 如何创建 2 个等高的列,其中右列位于左列内?

javascript - 使用 AnalyserNode 和 ChannelSplitter 获取 L/R 数据

Javascript 监听器在转换为 slug 后将文本从第一个文本字段添加到第二个文本字段

javascript - 如何在 JavaScript 中检查值是否属于 Map 类型?

PHP 和 Javascript 计数定时器

html - 带 margin-top 的边框

html - 如何将在线字体链接转换为本地字体链接?