Я пытаюсь изучить JavaScript, но я столкнулся с препятствием. Если ответ очевиден и достижим посредством простого поиска, я приношу извинения заранее. Я - новичок к программированию и JavaScript, и не уверенный что строка запроса следовать.
В следующем коде функция принимает значения от HTML-формы, делает некоторую обработку и передает их обратно. Я протестировал входной и выходной процесс, и он работает правильно.
function foo() {
var x = parseInt(document.formdata.fieldone.value);
var y = parseFloat(document.formdata.fieldtwo.value);
if (isNaN(y))
{ var z = x; }
else
{ var z = function(x, y) {
if ((y * (x / 100)) < 1) {
return (x + Math.ceil(y * (x / 100))); }
else if ((y * (x / 100)) > 1) {
return (x + Math.round(y * (x / 100))); }
else {
return 0; } } }
var bar = document.getElementById("output");
bar.innerHTML = z; }
Проблема, когда еще ответвление условного оператора пытается обработать анонимную функцию, возвращаемое значение не присвоено; скорее полнота функции как строка. Таким образом, следующее появляется в странице HTML:
функция (x, y) {если ((y * (x / 100)) <1) {возврат (x + Math.ceil (y * (x / 100)));} еще, если ((y * (x / 100))> 1) {возврат (x + Math.round (y * (x / 100)));} еще {возвращаются 0; }}
Я протестировал код в Chrome и Firefox, и результатом является то же.
Любая справка ценится и заранее спасибо.
Вам необходимо вызвать функцию, передав ей два аргумента, потому что в противном случае переменная z
просто сохранит ссылку на эту функцию, но не будет ее оценивать:
var z = (function(x, y) {
if ((y * (x / 100)) < 1) {
return (x + Math.ceil(y * (x / 100))); }
else if ((y * (x / 100)) > 1) {
return (x + Math.round(y * (x / 100))); }
else {
return 0;
}
})(x, y);
Обратите внимание, что ( x, y)
, используемые внутри анонимной функции, не совпадают с переданными в качестве аргументов в конце, которые соответствуют двум переменным, объявленным в начале функции foo
.