2012-06-23 15 views
10

Estoy trabajando con una biblioteca de carga de archivos Javascript, y una de sus características es que usa atributos de datos en línea HTML5 para pasar información al complemento.Pasar una función de Javascript a través de los atributos de datos en línea

Esto funciona perfectamente para cualquier cosa relacionada con datos, cadenas, números, etc., sin embargo, el complemento tiene algunos métodos de devolución de llamada a los que puede asignar funciones. Mi problema es que cuando se trata de pasar una función Javascript a través de estos datos de atributos en línea, así:

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

El plugin recoge la referencia a la onFinish() de devolución de llamada método bien, pero cuando se trata de ejecutar cualquier javascript puse ahí me sale el error:

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

estoy asumiendo que es la lectura de la alert(); como una cadena. ¿Alguna idea de cómo puedo pasar javascript ejecutable al plugin?

Creo que el plugin que estoy usando es una extensión para el archivo de carga jQuery plugin: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

Actualización: También he intentado usar funciones definidas a nivel mundial, así:

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

he intentado cambiar el atributo data-on-finish-myTesting, myTesting(), todavía no tuvo suerte ...

+0

¿Has probado sin el()? – Flash

+0

Lo intentó, no hubo suerte. He agregado la actualización anterior. – petehare

+0

Creo que el eval() hará el trabajo pero puede ser peligroso: http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea –

Respuesta

19

¿por qué no colocar el nombre de la devolución de llamada en su lugar? algo así como

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

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

+1 para la forma de llamar a la función de espacio de nombres de esta manera. – sabithpocker

+0

Intenté esto sin éxito por desgracia. Todavía está tratando de llamar al método 'call()' en una cadena, parece – petehare

+0

@petehare no, no está llamando a una cadena. la respuesta usa esa cadena para señalar esa función en un cierto espacio de nombre. – Joseph

0

Parece que está tratando de llamar a una función de la espalda, como en, myfunction.call (

Try fallecimiento es una función como esta.

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

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

Algo similar está pasando, está leyendo 'myFunction;' como una cadena y tratando de ejecutar el método '" myFunction; ". Call()' en la cadena ... – petehare

0

usar algo como esto:

$(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>

Cuestiones relacionadas