在我当前的 jQuery Mobile 应用程序中,我在各种 HTML 元素上捕获点击事件,使用
var data = $(element).data();
将其全部打包成 JSON 字符串
var json = JSON.stringify(data);
并将其发送到其他地方进行下游处理。
我遇到的问题(我很确定它只是从最新版本的 jQuery Mobile 开始)是一些元素,如收音机、复选框和按钮,它们具有作为 data() 数组的一部分的匿名函数。序列化这些函数是
- 与我的申请无关
- 更重要的是,它会触发一个类似于“尝试使用不再有效的对象”的 JavaScript ...
通过一些实验,我发现问题与在原始 data() 对象中出现的匿名函数有关
- 按钮元素
- 移动复选框收音机
等等。然后我构建自己的对象来序列化没有这些违规实体。
这没关系,但我发现了另一个问题。更改 jQM 版本和 BOOM,由于属性名称已更改(例如 mobileCheckboxRadio 代替 mobile-checkboxradio),问题再次出现。
问题 - 任何人都可以提出一种更通用的、与属性名称无关的方法来去除这些令人反感的部分吗?我自己的努力和试图找出对象属性的 typeof 都失败了,因为我得到的总是一个字符串。我想我总是可以在那个字符串中检查“匿名函数”这个短语,但这听起来很笨拙。