javascript - 将任意回调函数附加到 dom 元素的最佳方法?
问题描述
以下(vanillajs)代码工作正常
// library code:
let close_cb; // nasty global var...
...
let tree = document.createElement('ul');
tree.addEventListener('click', function(event) {
...
// let close_cb = tree.getAttribute('CLOSE_CB');
// let close_cb = tree.onchange;
close_cb(leaf.id, ', so there');
// user code:
function my_close_cb(id, msg) {
const footer = document.querySelector('footer');
footer.innerHTML = id + ' is closed' + msg;
}
// tree.setAttribute('CLOSE_CB',my_close_cb);
// tree.onchange = my_close_cb;
close_cb = my_close_cb;
但是注释掉的 s/getAttribute 代码失败,getAttribute 将“function my_close_cb(...”的全文放在本地 close_cb 中。
注释掉的 onchange hack 确实有效,但至少可以说感觉非常狡猾,尽管它肯定更接近我所追求的。
请注意,“库代码”是手写的并且完全在我的控制之下,而“用户代码”旨在被转译或以其他方式由机器生成,因此将 my_close_cb 更改为接受单个事件参数将是完全不可行的。
将接受任意参数集的任意回调函数附加到 dom 元素的最佳方法是什么?
解决方案
您可以将纯 json 属性附加到 DOM 元素。
document.body.callback = function cb(text) { console.log(text); };
document.body.callback("hello world");
推荐阅读
- python - 删除 Python 中的最后一个元音
- python - 嵌套列表中的嵌套列表 - Python?
- python - 自定义生成器中用于训练 CNN 的实例数量错误(python)
- python - 熊猫仅在目标列为空时才使用字典替换
- excel - AND 函数是否不适合引用 Excel 中两列中为 TRUE 的值?
- arrays - VBA - 加载数组,跳过空白
- java - 如何在 AnyLogic 中读取行中的不同列?
- c++ - 从对数范围计算每十年的点数
- php - 相同的编码,相同的字符集,不同的结果
- php - Laravel 中不存在目标类 [Database\Seeders\MockNotification]