2012-06-23 42 views
10

我正在使用Javascript文件上传库,其中一个特性是它使用HTML5内联数据属性将信息传递给插件。通过内嵌数据属性传递Javascript函数

这对任何与数据相关的,字符串,数字等都很适用,但插件有一些可以分配函数的回调方法。我的问题是,试图通过这些在线数据传递一个JavaScript函数时的属性,就像这样:

<input type="file" name="test" data-on-finish="alert();"> 

插件拿起参考onFinish()回调方法很好,但是当它试图执行任何的JavaScript我把在那里我得到的错误:

Uncaught TypeError: Object alert(); has no method 'call' 

我假设它的读取alert();为字符串。任何想法如何通过可执行JavaScript传递给插件?

我相信我使用的插件的扩展jQuery的文件上传插件: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

更新: 我使用全局定义的功能也试过,像这样:

<script type="text/javascript"> 
    function myTesting(){ 
     alert('yay'); 
    } 
</script> 
<input type="file" name="test" data-on-finish="myTesting"> 

我试图改变data-on-finish属性myTestingmyTesting(),仍然没有运气...

+0

你没有尝试没有()? – Flash

+0

试了一下,没有运气。我已经添加了上面的更新。 – petehare

+0

我认为eval()会做这项工作,但可能是危险的: http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea – 2012-09-28 07:56:03

回答

19

为什么不把回调的名字改为?像

//for example, a global function 
window['someFunctionName'].call(); 

//a namespaced function 
//similar to doing ns.someFunctionName() 
ns['someFunctionName'].call(); 
+0

+1这种方式来调用命名空间函数。 – sabithpocker

+0

不幸的是,我试过这个无济于事。它仍然试图调用字符串上的'call()'方法,它似乎是 – petehare

+0

@petehare否,它不调用字符串。答案使用该字符串指向某个名称空间中的该函数。 – Joseph

0

它看起来像它试图调用一个函数回,如,myfunction.call(

尝试传球这样的功能。

<input type="file" name="test" data-on-finish="myFunction;"> 

function myFunction(){ 
alert('I am alerting'); 
}; 
+0

发生类似的事情,它正在读取'myFunction;'作为字符串并尝试在字符串上运行''myFunction;'。call()'方法... – petehare

0

使用类似这样的:

$(function() { 
 
    function test() { 
 
    alert("ok"); 
 
    } 
 

 
    $(".test").data("test", test); 
 
    $(".test").data("test")(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
 
<div class="test"> 
 
</div>