将回调函数作为html数据属性传递
Pass a callback function as a html data attribute
我已经创建了一个像这样的DOM结构
<div data-execute="someFunction.abc" id="someId">
</div>
我能够在js中检索属性,但我打算将其作为回调函数执行。所以我要这样做
var x = document.getElementById("someId").getAttribute('data-execute');
如预期的那样,返回someFunction。但是在consolingtypeof (x)上显示的是"字符串"。请参考这张小提琴
var someFunction = function() {
alert("Hello")
}
var load = (function(module, global) {
var x = document.getElementById("someId").getAttribute('data-execute');
console.log(typeof(x))
}(load || {}, this))
<div data-execute="someFunction.abc" id="someId">
Some Function
</div>
我也检查了这个链接通过内联数据传递Javascript函数- attributes
但是我无法将其作为回调函数执行。
试试这个:
<div data-execute="someFunction.abc" id="someId"></div>
var x = document.getElementById("someId").getAttribute('data-execute');
window[x].call();
您可以在全局作用域中定义的函数中使用call
方法,您可以在全局窗口对象中访问它。
裁判:
call()方法使用给定的this值和调用函数单独提供的参数
我假定点之后的代码是传递给函数的参数。
代码:var someFunction = function (p) {
alert(p)
}
var load = (function (module, global) {
var x = document.getElementById("someId").getAttribute('data-execute');
window[x.split('.')[0]].call(undefined, x.split('.')[1]);
}(load || {}, this))
演示:https://jsfiddle.net/IrvinDominin/5bjsmu3x/
我也遇到了同样的问题,我找到了这个解决方案:
HTML:<element data-call="return alert('callback');">
JS:
Function(YourElement.getAttribute('data-callback'))();
您可以将其存储在一个变量中并添加参数:
HTML:<element data-call="return str.toUpperCase();">
JS:
var fn = Function("str", YourElement.getAttribute('data-callback'));
var returned = fn("Test String");
相关文章:
- 函数jquery.html()不提供数据属性集值
- 使用数据属性将HTML数据复制到另一个元素
- 使用jQuery在select选项上设置HTML数据属性
- 使用Javascript而不是html数据属性配置Parsley
- 使用 Javascript 编写引用属性数据的 HTML
- 选择具有特定值的 html 数据属性
- Javascript:如何将带有html内容的变量注入到附加的数据属性中
- 生成html时,在html数据属性中存储由.push()填充的数组
- 如何查找所选HTML选项的所有数据属性
- 当通过Jquery data()附加时,以及当直接通过HTML中的数据属性附加时,检查HTML元素中的数据()
- html数据属性在firefox中使用javascript时没有按预期显示,但在chrome中显示正确
- 获取 html 元素的点击事件的数据-* 属性
- AJAX 数据 - 替换 HTML 与更新值属性
- 如何将javascript对象或JSON存储在使用html5数据属性的html元素中
- 使用 PrototypeJS 1.6 访问锚点上的 HTML 数据属性
- JS变量等于html数据属性
- 为什么AngularJS在使用ng-bind-html时会去除数据属性
- 获取 HTML 元素的所有静态数据属性,而无需内部绑定数据
- Html将5个数据属性转换为jquery插件选项格式
- 如何将变量添加到附加的html数据属性中