2014-09-16 2 views
3

У меня есть некоторые JavaScript код:TypeError в функции JavaScript

var update_money = function(money_am){ 
    var d = {'ammount': money_am}; 
    $.post("/adr/", d, load_money) 
} 

z = parseFloat($('#money').val()); 
$('#money').change(z, update_money); 

Когда он выполняет, он дает мне ошибку времени выполнения:

TypeError: 'stopPropagation' called on an object that does not implement interface Event.

В отлаживать, я обнаружил, что money_am не поплавок. Это объект. Но если я изменю свой код следующим образом:

var update_money = function(money_am){ 
    var d = {'ammount': parseFloat($('#money').val())}; 
    $.post("/adr/", d, load_money) 
} 

Он отлично работает. Что мне делать, чтобы исправить эту проблему?

+0

Какова стоимость load_money? – Paradoxis

+0

Вы объявили z как переменную ранее в коде, забыв объявить, что var может дать более странное поведение? –

+0

@ Paradoxis load_money - еще одна функция. Я думаю, это не имеет значения, потому что на самом деле у меня есть ошибка перед публикацией. Когда update_money, выполненный money_am, имеет неправильный тип, и на самом деле это проблема. – StopKran

ответ

2

данных, который был передан в обработчик события, могут быть доступны event.data:

Fiddle.

var update_money = function(event) 
{ 
    var money_am = event.data; 
    alert(money_am); 
    var d = {'ammount': money_am}; 
    $.post("/adr/", d, load_money); 
} 

function load_money() { } 

z = parseFloat($('#money').val()); 
$('#money').change(z, update_money); 
0

Убедитесь, что деньги значение распознаваемо parseFloat:

Вы также можете изменить свой код на этот:

$('#money').change(function() { 
    var z = parseFloat($('#money').val()); 
    load_money(z); 
}); 

Это позволит вам получить новые деньги значение каждый раз # поле денег меняется. Вместо того, чтобы всегда использовать одно и то же значение. Наряду с правильным определением z.

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