2012-06-23 38 views
10

Tôi đang làm việc với thư viện tải lên tệp Javascript và một trong các tính năng của nó là sử dụng thuộc tính dữ liệu nội tuyến HTML5 để chuyển thông tin cho plugin.Truyền chức năng Javascript thông qua thuộc tính dữ liệu nội tuyến

Điều này hoạt động tốt cho mọi dữ liệu liên quan, chuỗi, số vv, tuy nhiên plugin có một số phương thức gọi lại mà bạn có thể gán chức năng. Vấn đề của tôi là khi cố gắng để vượt qua một hàm javascript thông qua các dữ liệu nội tuyến thuộc tính, như thế này:

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

Plugin nhặt tham chiếu đến onFinish() gọi lại phương pháp tốt, nhưng khi nó cố gắng để thực hiện bất cứ điều gì javascript Tôi đặt trong đó tôi nhận được lỗi:

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

Tôi giả sử nó đang đọc alert(); làm chuỗi. Bất kỳ ý tưởng làm thế nào tôi có thể vượt qua javascript thực thi để các plugin?

Tôi tin rằng các plugin Tôi đang sử dụng là một mở rộng của jQuery tập tin upload plugin: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

Cập nhật: Tôi cũng đã cố gắng sử dụng các chức năng được xác định trên toàn cầu, như thế này:

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

Tôi đã thử thay đổi thuộc tính data-on-finish thành myTesting, myTesting(), vẫn không có may mắn ...

+0

Bạn đã thử không có()? – Flash

+0

Hãy dùng thử, không may mắn. Tôi đã thêm bản cập nhật ở trên. – petehare

+0

Tôi nghĩ rằng eval() sẽ thực hiện công việc nhưng có thể nguy hiểm: http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea –

Trả lời

19

Tại sao không đặt tên gọi lại thay thế? cái gì đó như

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

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

1 cho cách gọi hàm không gian tên theo cách này. – sabithpocker

+0

Tôi đã thử điều này vô ích. Nó vẫn đang cố gắng gọi phương thức 'call()' trên một chuỗi có vẻ như – petehare

+0

@petehare no, nó không gọi một chuỗi. câu trả lời sử dụng chuỗi đó để trỏ đến hàm đó trong một không gian tên nhất định. – Joseph

0

Dường như nó đang cố gắng để gọi một chức năng trở lại, như trong, myfunction.call (

Cố gắng đi qua là một chức năng như thế này.

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

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

Điều tương tự xảy ra, nó đang đọc 'myFunction;' như một chuỗi và cố gắng chạy phương thức 'myFunction; '. Call()' trên chuỗi ... – petehare

0

Sử dụng một cái gì đó như này:

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

Các vấn đề liên quan