Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能否将javascript函数名设置为html属性?_Javascript_Jquery_Html - Fatal编程技术网

能否将javascript函数名设置为html属性?

能否将javascript函数名设置为html属性?,javascript,jquery,html,Javascript,Jquery,Html,是否可以编写一个html属性来存储javascript函数的名称,然后提取该val()并执行该函数?例如: <button id="example" data-function-name="showAllElements()"> 你可以,是的。你是否应该完全是另一个问题,答案几乎肯定是“否”(就执行字符串而言;就下面所示的备选方案而言,有时它是有用的) 计算代码片段的方法(由于(),您拥有的不仅仅是函数名)是使用可怕的eval: eval(fn); 几乎总是有比使用eval更好的

是否可以编写一个html属性来存储javascript函数的名称,然后提取该val()并执行该函数?例如:

<button id="example" data-function-name="showAllElements()">
你可以,是的。你是否应该完全是另一个问题,答案几乎肯定是“否”(就执行字符串而言;就下面所示的备选方案而言,有时它是有用的)

计算代码片段的方法(由于
()
,您拥有的不仅仅是函数名)是使用可怕的
eval

eval(fn);
几乎总是有比使用
eval
更好的选择。(见下文。)

eval
示例:

$(“#示例”)。在(“单击”,函数(){
var fn=$(“#示例”).attr(“数据函数名”);
eval(fn);
});
函数显示(){
警惕(“称为展示”);
}
点击我

当然可以。。。假设
showAllegements
是全局的

函数显示(){
log(“test!”);
}
document.querySelector(“按钮”).addEventListener(“单击”),函数(e){
var functionName=this.getAttribute(“数据函数名”);
窗口[函数名]();
});

x
虽然我不认为可以直接使用HTML属性(除了上面提到的全局函数)来实现,但是如果可以在页面加载时使用javascript添加数据元素,那么可以直接实现。正如这里所说,jquery的
$.data()
数据-*
属性不同。根据,使用
.data()
“存储的值是新的数据值;它可以是除未定义之外的任何Javascript类型。”

因此,您可以直接使用

function my_func(){
   // Do stuff
}
$(function(){
   $('#foo').data('func', my_func);
});
后来

var func = $('#foo').data('func');
if( $.isFunction( func ) ) {
   func.call( $('#foo'), somearg );
}
我有


这样做的好处是,您可以在机柜等中使用函数。只要将它们添加到同一机柜范围内的元素中。

要找到答案,您必须尝试:)这可能会对您有所帮助:。它用于变量,但与函数的方式相同。很好,我没想到!当然,只适用于全局函数,全局函数和所有全局函数一样,都是一个坏主意。@T.J.Crowder-不,它适用于任何对象,只要您有一个引用。它只是按函数名查找函数,然后调用它。这没什么神奇的。也可以是:
({foo:function(){console.log('bar');}}})['foo']()。那里没有全局函数。我意识到我把它作为一个热门帖子漏掉了。没有看到任何其他答案。你的很可能在那里,但这不是我添加它的原因。我刚刚意识到我犯了一个错误,就是告诉OP如何使用
eval
,告诉他们可能不应该这样做,并且不给他们选择的机会!:-)噢,+1用于巧妙地使用
reduce
!谢谢,我真的很喜欢你的建议!另外,您能给我解释一下使用.data()的情况吗?很遗憾,我有一段时间误用了jQuery。。。认为它是包装纸/塑料填充物。@canon:你和其他很多人。:-)我一直在想,在另一个世界中,API是如何让这一点变得更清楚的,因为人们会被它误导。但我什么都没想到,反正现在已经出局了。。。
var func = $('#foo').data('func');
if( $.isFunction( func ) ) {
   func.call( $('#foo'), somearg );
}