2012-06-23 20 views
10

Pracuję z biblioteką do przesyłania plików JavaScript, a jedną z jej funkcji jest używanie atrybutów wbudowanych HTML5 do przekazywania informacji do wtyczki.Przekazywanie funkcji JavaScript za pomocą wbudowanych atrybutów danych

Działa to doskonale dla wszystkich danych związanych, łańcuchów, liczb itp., Jednak wtyczka ma kilka metod wywoływania zwrotnego, do których można przypisać funkcję. Moim problemem jest to, że gdy próbuje przekazać funkcję javascript przez te inline danych atrybutów, takich jak to:

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

Wtyczka podnosi odniesienie do onFinish() callback metody w porządku, ale kiedy próbuje wykonać niezależnie JavaScript Włożyłem w nie pojawia się błąd:

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

ja zakładając, że czytanie alert(); jako ciąg znaków. Masz pomysł, jak przejść przez plik wykonywalny javascript do wtyczki?

wierzę plugin Używam jest rozszerzeniem do jQuery Prześlij plik plugin: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

Aktualizacja: Próbowałem zostały również zdefiniowane globalnie za pomocą funkcji, takich jak to:

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

próbowałem zmieniając atrybut data-on-finish do myTesting, myTesting(), nadal nie miał szczęścia ...

+0

Czy próbowałeś bez()? – Flash

+0

Spróbuj, nie ma szczęścia. Dodałem aktualizację powyżej. – petehare

+0

Myślę, że eval() wykona zadanie, ale może być niebezpieczne: http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea –

Odpowiedz

19

zamiast tego zamiast nazwy wywołania zwrotnego? coś

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

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

+1 dla sposobu wywoływania funkcji nazwanych w ten sposób. – sabithpocker

+0

Próbowałem tego bezskutecznie. Nadal próbuje wywołać metodę 'call()' na łańcuchu, który wydaje się być – petehare

+0

@petehare no, jej nie wywołanie ciągu. odpowiedź używa tego ciągu do wskazania tej funkcji w określonym obszarze nazw. – Joseph

0

wygląda na to, że stara się wywołać funkcję z powrotem, jak w, myfunction.call (

Spróbuj mijania jest funkcją tak.

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

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

Podobnie dzieje się, czyta 'myFunction;' jako ciąg i próbuje uruchomić '' myFunction; ". Metoda call() na łańcuchu ... – petehare

0

użyć coś jak to:

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

Powiązane problemy