2012-06-23 20 views
10

Sto lavorando con una libreria di caricamento file Javascript, e una delle sue caratteristiche è che utilizza attributi di dati inline HTML5 per passare le informazioni al plug-in.Passaggio di una funzione Javascript tramite attributi dati in linea

Questo funziona perfettamente per qualsiasi dato correlato, stringhe, numeri ecc., Tuttavia il plugin ha alcuni metodi di callback a cui è possibile assegnare la funzione. Il mio problema è che quando si cerca di passare una funzione javascript attraverso questi dati in linea attributi, come questo:

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

Il plugin raccoglie il riferimento al OnFinish() di callback metodo bene, ma quando si tenta di eseguire qualunque javascript ho messo in là ottengo l'errore:

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

sto assumendo che è la lettura del alert(); come una stringa. Qualche idea su come posso passare tramite javascript eseguibile al plugin?

Credo che il plug-in che sto utilizzando è un'estensione per il caricamento di file jQuery plugin: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

Aggiornamento: Ho anche provato ad utilizzare funzioni definite a livello globale, in questo modo:

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

ho provato a cambiare l'attributo data-on-finish-myTesting, myTesting(), ancora non ha avuto fortuna ...

+0

Hai provato senza il()? – Flash

+0

Ci ha provato, senza fortuna. Ho aggiunto l'aggiornamento sopra. – petehare

+0

Penso che l'eval() farà il lavoro ma può essere pericoloso: http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea –

risposta

19

perché non inserire invece il nome del callback? qualcosa come

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

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

+1 per il modo di chiamare la funzione di namespace in questo modo. – sabithpocker

+0

Purtroppo ho provato senza successo. Sta ancora cercando di chiamare il metodo 'call()' su una stringa che sembra – petehare

+0

@petehare no, non sta chiamando una stringa. la risposta usa quella stringa per puntare a quella funzione in un determinato spazio dei nomi. – Joseph

0

Sembra che si sta cercando di chiamare una funzione di nuovo, come in, myfunction.call (

Prova a passare una funzione come questa.

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

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

La cosa simile sta succedendo, sta leggendo 'myFunction;' come una stringa e cercando di eseguire il metodo '" myFunction; ". Call()' sulla stringa ... – petehare

0

usare qualcosa di simile questo:

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

Problemi correlati