Вопрос по callback, javascript, function, attributes, html5 – Передача функции Javascript через встроенные атрибуты данных

10

Я работаю с библиотекой загрузки файлов Javascript, и одна из ее особенностей заключается в том, что она использует встроенные атрибуты данных HTML5 для передачи информации плагину.

Это прекрасно работает для любых данных, строк, чисел и т. Д., Однако в плагине есть несколько методов обратного вызова, которым вы можете назначить функцию. Моя проблема в том, что при попытке передать функцию javascript через эти встроенные атрибуты данных, например так:

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

Плагин прекрасно получает ссылку на метод обратного вызова onFinish (), но когда он пытается выполнить любой JavaScript-код, который я там вставил, я получаю ошибку:

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

Я предполагаю, что он читаетalert(); как строка Любая идея, как я могу пройти через исполняемый JavaScript-код к плагину?

Я полагаю, что используемый мной плагин является расширением плагина загрузки файлов jQuery: https://github.com/blueimp/jQuery-File-Upload/wiki/Options

Update: Я также пытался использовать глобально определенные функции, например:

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

Я пытался изменитьdata-on-finish приписыватьmyTesting, myTesting()еще не повезло ...

Дай попробовать, не повезло. Я добавил обновление выше. petehare
Вы пробовали без ()? Flash
Я думаю, что eval () сделает работу, но может быть опасно:stackoverflow.com/questions/86513/… user1705628

Ваш Ответ

3   ответа
20

почему бы не разместить вместо него имя обратного вызова? что-то вроде

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

//a namespaced function
//similar to doing ns.someFunctionName()
ns['someFunctionName'].call();
Спасибо @JosephtheDreamer petehare
+1 за способ вызова функции пространства имен таким способом.
Я пытался это безрезультатно, к сожалению. Он все еще пытается позвонитьcall() метод на строку кажется petehare
@petehare нет, это не вызов строки. ответ использует эту строку, чтобы указать на эту функцию в определенном пространстве имен.
0

Похоже, что он пытается вызвать функцию обратно, как в, myfunction.call (

Попробуйте передать это функция, как это.

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

function myFunction(){
 alert('I am alerting');
};
Подобная вещь происходит, это чтениеmyFunction; как строка и пытается запустить"myFunction;".call() метод в строке ... petehare
0

Используйте что-то вроде этого:

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

Похожие вопросы