2015-10-04 2 views
2

У меня есть следующая строка в файле site.html.Почему моя функция не определена с помощью Meteor?

<input type="text" name="income" id="income" onkeydown="myFunction(this.value)"> 

У меня есть отдельный site.js файл, который выглядит следующим образом:

if (Meteor.isClient) { 
     function myFunction(val) { 
     var income = document.getElementById("income").value; 
     } 
     var total = total + income; 
    } 

    if (Meteor.isServer) { 
     Meteor.startup(function() { 
     // code to run on server at startup 
     }); 
    } 

Так, по существу, мне нужно, чтобы получить значение из поля ввода либо размытости или типизированных (OnKeyDown) и добавьте его в локальную переменную «total», которая отображается где-то еще на странице. По какой-то причине моя функция не работает, когда я печатаю, я получаю «myFunction не определен» в консоли. Где мне нужно точно определить его (в моем файле .html не должен использоваться JavaScript).

+0

Функция 'myFunction' должна быть объявлена ​​вне какой-либо другой функции (глобальный охват), в противном случае встроенные обработчики событий, такие как' OnKeyDown = "MyFunction (this.value) "' не может видеть эту функцию. Лучшей практикой было бы привязать обработчик событий с помощью 'addEventListener' (вы сказали _« в JavaScript-файле не будет использоваться JavaScript в _html-файле », но все равно используйте встроенные прослушиватели событий). – Xufox

+0

Вот ваш ответ https://www.meteor.com/tutorials/blaze/creating-an-app –

+0

Возможный дубликат [JavaScript не вызывается в встроенном обработчике событий] (http://stackoverflow.com/questions/14035463/javascript-not-being-called-in-inline-event-handler) – Xufox

ответ

1

Вот версия, которая работает с событием размытия. разметки:

<body> 
    {{> hello}} 
</body> 

<template name="hello"> 
    <input type="text" name="income" id="income"> 
    <h2>{{Total}}</h2> 
</template> 

А JavaScript:

if (Meteor.isClient) { 
    // counter starts at 0 
    Session.set('total', 0); 

    Template.hello.helpers({ 
    Total: function() { 
     return Session.get('total'); 
    }, 
    }); 

    Template.hello.events({ 
    'blur #income': function (event, template) { 
     // increment the counter when button is clicked 
     Session.set('total', Session.get('total') + Number(event.target.value)); 
     event.target.value = ''; 
    }, 
    }); 
} 
+0

Спасибо, я закончил использование «change #income», потому что вход не работал в моем случае (проблемы с добавлением номера). Но да, это то, что я искал. Я думаю, это хорошая идея изучить немного больше ссылок на события, поскольку они очень полезны. Еще раз спасибо. – JanisOzolins

Смежные вопросы