2012-06-23 17 views
10

Ich arbeite mit einer Javascript-Datei Upload-Bibliothek, und eine seiner Funktionen ist, dass es HTML5 Inline-Daten-Attribute verwendet, um Informationen an das Plugin zu übergeben.Übergeben einer JavaScript-Funktion durch Inline-Datenattribute

Dies funktioniert gut für alle Daten, Strings, Zahlen usw., aber das Plugin verfügt über einige Callback-Methoden, denen Sie Funktionen zuweisen können. Mein Problem ist, dass, wenn eine Javascript-Funktion durch diese Inline-Daten zu übergeben versucht, Attribute, wie folgt aus:

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

Das Plugin nimmt den Verweis auf die OnFinish() Callback-Methode in Ordnung, aber wenn es versucht, was auch immer Sie Javascript auszuführen ich habe dort erhalte ich die Fehlermeldung:

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

ich nehme an, es ist die alert(); als String zu lesen. Irgendeine Idee, wie ich ausführbares Javascript an das Plugin weitergeben kann?

Ich glaube, das Plugin ich benutze ist eine Erweiterung auf die jQuery-Datei-Upload-Plugin: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

Update: ich auch global definierte Funktionen versucht haben, verwendet wird, wie folgt aus:

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

ich habe versucht, das data-on-finish Attribut myTesting ändern, myTesting(), noch kein Glück hatte ...

+0

Haben Sie ohne die() versucht? – Flash

+0

Probieren Sie es aus, kein Glück. Ich habe das obige Update hinzugefügt. – petehare

+0

Ich denke, die Eval() wird den Job machen, aber kann gefährlich sein: http://StackOverflow.com/Questions/86513/Why-ISusing-the-Javascript-eval-Function-A-bad-idea –

Antwort

19

warum nicht stattdessen den Namen des Callbacks? so etwas wie

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

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

+1 für die Art, Namespaced aufzurufen, funktioniert auf diese Weise. – sabithpocker

+0

Ich habe das leider vergebens versucht. Es versucht immer noch, die Methode 'call()' für eine Zeichenfolge aufzurufen, die scheinbar – petehare

+0

@petechare no lautet und keine Zeichenfolge aufruft. Die Antwort verwendet diese Zeichenfolge, um auf diese Funktion in einem bestimmten Namespace zu verweisen. – Joseph

0

Es sieht aus wie es eine Funktion versucht, zurück zu rufen, wie in, myfunction.call (

Try Gang ist eine Funktion wie diese.

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

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

Ähnliches passiert, es liest 'myFunction;' als eine Zeichenfolge und versucht, die '" myFunction; ". Call()' Methode auf der Zeichenfolge auszuführen ... – petehare

0

Verwendung so etwas wie dies:

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

Verwandte Themen